===== Liquibase ===== Tool to track B changes TO clean up the checksum after the change do update databasechangelog set md5sum = null where filename = '2014_10_27.xml'; === how it works=== Liquibase stores all metadata in 2 tables: CREATE TABLE PUBLIC.DATABASECHANGELOGLOCK ... CREATE TABLE PUBLIC.DATABASECHANGELOG ... ===Syntax of the call=== == H2 == * There is the syntax of the liquibase call. * The Driver name: org.h2.Driver * THe location of the Driver is: c:\doj\materials\Liquibase\h2jar\h2-1.4.197.jar liquibase --driver=org.h2.Driver --classpath="c:\doj\materials\Liquibase\h2jar\h2-1.4.197.jar" --changeLogFile=../changelogs/extend.user.changelog.liquibase.xml --url="jdbc:h2:tcp://localhost:9092/mem:dbname" --username=mydbuser --password=mydbpass migrate == Postgres == wget -O liquibase.tar.gz https://github.com/liquibase/liquibase/releases/download/v3.9.0/liquibase-3.9.0.tar.gz tar -xzvf liquibase.tar.gz wget -O postgresql-jdbc4.jar https://jdbc.postgresql.org/download/postgresql-42.2.5.jre6.jar chmod +x postgresql-jdbc4.jar ./liquibase --driver=org.postgresql.Driver --classpath="/tmp/liquibase/postgresql-jdbc4.jar" --changeLogFile=dbchangelog.xml --url="jdbc:postgresql://localhost:5432/postgres" --username=postgres --password=postgres generateChangeLog == Example changeset== == logicalFilePath == To avoid the repetition of already executed changeSets - explicitely set the **logicalFilePath** on the databaseChangeLog and every chagneSet. The table tracks each changeSet as a row, identified by a combination of the “id”, “author” and a “filename” column which stores the path to the changelog file. Please note that the filename column stores the path to the changelog. This may be an absolute path or a relative path depending on how the changelog was passed to Liquibase. For best results, it should be a relative path. ... https://www.liquibase.org/documentation/databasechangelog.html == Debug == # create a tunnel to the STAGE ssh jump server and the postgres db on STAGE sudo ssh -i /home/vagrant/.ssh/ssh.openssh.priv -NL 9000:privatedbdns.com:5432 myuser@11.222.33.111 -v # connect the postgres database psql -h localhost -p 9000 -U MyAdmin --dbname my_db # PSQL password: thepassword # list schemas select schema_name from information_schema.schemata; # list tables \dt *.* # show the liquibase history SELECT * FROM databasechangelog; # remove the liquibase history DELETE FROM databasechangelog; # MANUAL creation of the schema. DONT DO THAT CREATE SCHEMA my_db; # MANUAL REMOVAL of the schema. DONT DO THAT!!!!!!!!!!!!!!!!!!! DROP SCHEMA my_db CASCADE; === With Spring Boot === == INit the DB at start == To init the table - you only need the core **org.liquibase:liquibase-core** (no plugin) build.gradle dependencies { // liquibase compile 'org.liquibase:liquibase-core:3.9.0' // get the to the classpath which is needed but not loaded with "ddl-auto=none" and liquibase enabled compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-jaxb-annotations', version: '2.11.0' } application.properties # https://docs.spring.io/spring-boot/docs/current/reference/html/appendix-application-properties.html spring.datasource.driver-class-name=org.postgresql.Driver spring.datasource.username=postgres spring.datasource.password=postgres spring.datasource.host=localhost spring.datasource.port=5432 spring.datasource.database=postgres spring.datasource.url=jdbc:postgresql://${spring.datasource.host}:${spring.datasource.port}/${spring.datasource.database} # Liquibase without prefix #spring.liquibase.enabled=false spring.liquibase.enabled=true spring.liquibase.change-log=classpath:/db/changelog/db.changelog-master.yaml spring.liquibase.default-schema=public spring.liquibase.user=postgres spring.liquibase.password=postgres # will be taken from spring.* like spring.datasource.host #spring.liquibase.host=localhost #spring.liquibase.port=5432 #spring.liquibase.database=postgres #spring.liquibase.driver=org.postgresql.Driver resources/db/changelog/db.changelog-master.yaml databaseChangeLog: - includeAll: path: db/changelog/generated/ resources/db/changelog/generated/dbchangelog-1589882779384.xml ...