рдкрд░рд┐рдЪрдп
рд▓рд┐рдХреЗрдмреЗрд╕ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рдгрд╛рд▓реА рд╣реИ, рдпрд╣ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдХреА рдЪрд┐рдВрддрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░, рдХреБрдЫ рд╣рдж рддрдХ, рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рд╕рд╛рдордЧреНрд░реАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рд╡рд░реНрдгрди рдПрдХ рддрд░рдл рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рд╛рд░ рд╣реИ рдФрд░ рдирд┐рдЪрд▓реЗ рд╕реНрддрд░ рдкрд░ рд╡рд┐рднрд┐рдиреНрди DBMS рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдФрд░ рджреВрд╕рд░реА рддрд░рдл, рдЖрдк рд╣рдореЗрд╢рд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ DBMS рдХреА SQL рдмреЛрд▓реА рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд╛рдлреА рд▓рдЪреАрд▓рд╛ рд╣реИред рд▓рд┐рдХрд┐рдмреЗрд╕ рдПрдХ рд╕реНрдерд╛рдкрд┐рдд рдУрдкрди рд╕реЛрд░реНрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ рдореВрд▓ рдЬрд╛рд╡рд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдХреЗ рдмрд╛рд╣рд░ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬрд╛рд╡рд╛ рдХреЗ рдЧрд╣рди рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдПрдХ XML рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рд░реВрдк рд╕реЗ рдЖрдзрд╛рд░ рд╕рдВрд░рдЪрдирд╛ рдФрд░ рдЖрдзрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм YAML рдФрд░ JSON рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдкрд┐рдЫрд▓реА рдкреАрдврд╝рд┐рдпреЛрдВ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВрдЧреЗ рдФрд░ рдорд╛рд╡реЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдмрд╛рд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред рд╣рдо рдЙрдмрдВрдЯреВ рдХреЛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд▓рд┐рд▓реАрдмреЗрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдиреНрдп рд▓реЗрдЦ
рдкрд░реНрдпрд╛рд╡рд░рдг рдХреА рд╕реНрдерд╛рдкрдирд╛
рд▓рд┐рд▓реАрдмреЗрд╕ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдорд╛рд╡реЗрди рдпрд╛ рдЧреНрд░реИрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред
sudo apt install maven mvn -version
рдпрд╣рд╛рдВ pom.xml рдПрдХ рдореЗрдХрдлрд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ - рдЗрд╕рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ, рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.test.db</groupId> <artifactId>db</artifactId> <version>1.0.0</version> <name>db</name> <description>Test Database</description> <packaging>pom</packaging> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <slf4j.version>1.7.24</slf4j.version> <logback.version>1.2.3</logback.version> <liquibase.version>3.6.2</liquibase.version> <postgresql.version>42.2.5</postgresql.version> <snakeyaml.version>1.23</snakeyaml.version> </properties> <dependencies> <!--Logging--> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>log4j-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${slf4j.version}</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>${logback.version}</version> </dependency> <!--JDBC drivers--> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>${postgresql.version}</version> </dependency> <dependency> <groupId>org.liquibase</groupId> <artifactId>liquibase-core</artifactId> <version>${liquibase.version}</version> </dependency> <dependency> <groupId>org.yaml</groupId> <artifactId>snakeyaml</artifactId> <version>${snakeyaml.version}</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.liquibase</groupId> <artifactId>liquibase-maven-plugin</artifactId> <version>${liquibase.version}</version> <configuration> <propertyFile>${profile.propertyFile}</propertyFile> <changeLogFile>${profile.changeLogFile}</changeLogFile> <dataDir>${profile.dataDir}</dataDir> <!-- log --> <verbose>${profile.verbose}</verbose> <logging>${profile.logging}</logging> <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase> </configuration> </plugin> </plugins> </build> <profiles> <!-- Development settings, -Denv=dev --> <profile> <id>dev</id> <activation> <property> <name>env</name> <value>dev</value> </property> </activation> <properties> <profile.propertyFile>dev/liquibase.properties</profile.propertyFile> <profile.changeLogFile>dev/master.xml</profile.changeLogFile> <profile.dataDir>dev/data</profile.dataDir> <profile.verbose>true</profile.verbose> <profile.logging>debug</profile.logging> </properties> </profile> <!-- Production settings, -Denv=prod --> <profile> <id>prod</id> <activation> <property> <name>env</name> <value>prod</value> </property> </activation> <properties> <profile.propertyFile>prod/liquibase.properties</profile.propertyFile> <profile.changeLogFile>prod/master.xml</profile.changeLogFile> <profile.dataDir>prod/data</profile.dataDir> <profile.verbose>false</profile.verbose> <profile.logging>info</profile.logging> </properties> </profile> </profiles> </project>
рд╣рдо рдЕрдкрдбреЗрдЯ рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ
рдЬрдм рд╣рдордиреЗ pom.xml рдХрд┐рдпрд╛ рд╣реИ, рддрдм рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рд╢рд░рд╛рдмрдЦрд╛рдирд╛: рдЕрдкрдбреЗрдЯ рдХрдорд╛рдВрдбред
рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдП:
- liquibase.properties рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо / рдкрд╛рд╕рд╡рд░реНрдб рдФрд░ рд╕рдВрднрд╡рддрдГ рдЕрдиреНрдп рдкреИрд░рд╛рдореАрдЯрд░)
- рдмреЗрд╕ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде xml рдлрд╝рд╛рдЗрд▓
- sh рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрдкрдбреЗрдЯ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдбреЗрдЯрд╛рдмреЗрд╕ рдХрдиреЗрдХреНрд╢рди рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдлрд╝рд╛рдЗрд▓
liquibase.properties
username=test password=test referenceUsername=test # #url=jdbc:postgresql://dev/test #referenceUrl=jdbc:postgresql://dev/test_reference
рдЖрдзрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдлрд╝рд╛рдЗрд▓
рд╡рд╢реАрдХрд░рдг рдХреА рдореБрдЦреНрдп рдЕрд╡рдзрд╛рд░рдгрд╛ рддрдерд╛рдХрдерд┐рдд рдЖрдзрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди (рдкрд░рд┐рд╡рд░реНрддрди) рд╣реИред рд╡реЗ рд╕рдВрд░рдЪрдирд╛рддреНрдордХ рдкрд░рд┐рд╡рд░реНрддрди рдФрд░ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рджреЛрдиреЛрдВ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓рд┐рд▓реАрдмреЗрд╕ рдиреЗ рд▓рд╛рдЧреВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдкрд░ рдирдЬрд░ рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдбрд╛рдЯрд╛рд╕реИрд╕реНрдХреЗрд▓рдЧреЙрдЧ рдФрд░ рдбрд╛рдЯрд╛рд╕реИрд╕реНрдХреЗрд▓рдЧреНрд▓реЙрдЧ рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред
<?xml version="1.1" encoding="UTF-8" standalone="no"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.6.xsd"> <changeSet context="legacy" author="author (generated)" id="1"> <createTable tableName="test"> <column autoIncrement="true" name="id" type="SERIAL"> <constraints nullable="false"/> </column> <column name="user_name" type="VARCHAR(255)"/> <column name="preferences" type="TEXT"/> </createTable> </changeSet> </databaseChangeLog>
рдбреЗрдЯрд╛рдмреЗрд╕ рдЕрджреНрдпрддрди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдпрд╣рд╛рдВ рд▓рд┐рдмрд╛рд╕: рдЕрдкрдбреЗрдЯ рдХреЛ рджреЗрд╡рд┐рдмреЗ рдФрд░ рдмреЗрд╕ рд╕реЗ рд▓рд┐рдмрд╛рд╕ рдХреЗ рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдорд╛рдирдХ рдЬреЗрдбреАрдмреАрд╕реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╣реИред рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рдж, рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕рдВрдХреЗрдд рдФрд░ рджреЛ рд╕реЗрд╡рд╛ рддрд╛рд▓рд┐рдХрд╛рдПрдБ databasechangelog рдФрд░ databasechangeloglock рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИрдВ ред
#!/usr/bin/env bash mvn liquibase:update\ -Denv=dev\ -Dliquibase.url="jdbc:postgresql://dev/test?prepareThreshold=0&stringtype=unspecified"
рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдмрд┐рдирд╛ SQL рдкреАрдврд╝реА
рдХрднреА-рдХрднреА, рдкрд░рд┐рд╡рд░реНрддрди рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдкрдХреЛ рдЙрддреНрдкрдиреНрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛ред The liquibase: updateSQL рдФрд░ liquibase: rollbackSQL рдХрдорд╛рдВрдбреНрд╕ рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рд╣реИрдВред
#!/usr/bin/env bash mvn liquibase:updateSQL\ -Denv=dev\ -Dliquibase.url="jdbc:postgresql://dev/test?prepareThreshold=0&stringtype=unspecified" > /tmp/script.sql
рдЪреЗрдВрдЬрд╕реЗрдЯ рдкрд░ рдЕрдзрд┐рдХ
рдкрд░рд┐рд╡рд░реНрддрди рд╡рд┐рднрд┐рдиреНрди рд╕реНрд╡рд░реВрдкреЛрдВ рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдпрдорд┐рдд рдПрд╕рдХреНрдпреВрдПрд▓ рдпрд╛ рдПрдХ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рд╢рд╛рдорд┐рд▓ рд╣реИред
рдкреНрд░рддреНрдпреЗрдХ рдкрд░рд┐рд╡рд░реНрддрди рдореЗрдВ рдПрдХ рд░реЛрд▓рдмреИрдХ рдЕрдиреБрднрд╛рдЧ рд╢рд╛рдорд┐рд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рд▓рд┐рдмрд╛рд╕ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ : рд░реЛрд▓рдмреИрдХ рдХрдорд╛рдВрдбред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреИрдЧрдбреИрдЯрдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд╣рд╛рдВ рдФрд░ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рд░реЛрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
<changeSet context="legacy" author="author (generated)" id="1"> <createTable tableName="test"> <column autoIncrement="true" name="id" type="SERIAL"> <constraints primaryKey="true" primaryKeyName="test_pkey"/> </column> <column name="c1" type="VARCHAR(255)"/> <column name="c2" type="INTEGER"/> <column name="c3" type="SMALLINT"/> <column name="c4" type="VARCHAR(255)"/> <column name="c5" type="TEXT"/> <column name="c6" type="VARCHAR(255)"/> </createTable> </changeSet>
рдПрдВрдмреЗрдбреЗрдб рдПрд╕рдХреНрдпреВрдПрд▓
<changeSet context="legacy" author="author" id="1-domain-some-domain"> <sql> CREATE DOMAIN public.some_domain AS bigint; ALTER DOMAIN public.some_domain OWNER TO test; </sql> <rollback> DROP DOMAIN public.some_domain; </rollback> </changeSet>
SQL рдлрд╝рд╛рдЗрд▓
<changeSet context="legacy" author="author" id="1-user"> <sqlFile dbms="postgresql" path="sql/some.sql" relativeToChangelogFile="true" /> <rollback> delete from "some"; </rollback> </changeSet>
рдЯреИрдЧ
<changeSet context="legacy" author="author" id="1-initial-changeset"> <tagDatabase tag="initial"/> </changeSet>
рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдиреНрдпрд╛рд╕реЛрдВ рдХреЗ рдЕрдзрд┐рдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡рд┐рдХрд╛рд╕ / рдЙрддреНрдкрд╛рджрди, рд╕рдВрджрд░реНрднреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рдВрджрд░реНрдн рдХреЗ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдореЗрдВ рд╕рдВрджрд░реНрдн рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдорд╛рд╡реЗрди рджреНрд╡рд╛рд░рд╛ -Dcontexts рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ
<changeSet context="legacy" author="author" id="1-initial-changeset"> <tagDatabase tag="initial"/> </changeSet>
рдЯреНрд░рд┐рдЧрд░рд┐рдВрдЧ рд╕рдВрджрд░реНрдн рдкрд░рд┐рд╡рд░реНрддрди
#!/usr/bin/env bash mvn liquibase:update\ -Denv=dev\ -Dliquibase.url="jdbc:postgresql://dev/test?prepareThreshold=0&stringtype=unspecified"\ -Dliquibase.contexts=non-legacy
рд░реЛрд▓ рдмреИрдХ рдкрд░рд┐рд╡рд░реНрддрди
рдСрдкрд░реЗрд╢рди рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдкрд░реАрдд рд╣реИ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд░реНрдерд┐рдд рд╣реИред рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдХрд╛рд░реНрдп рд░реЛрд▓рдмреИрдХ рдЕрдиреБрднрд╛рдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрднрд╡ рд╣реИред рдЗрд╕реЗ рд▓рд┐рд▓реАрдмреЗрд╕: рд░реЛрд▓рдмреИрдХ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рд░реЛрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ
<changeSet context="legacy" author="author" id="1-domain-some-domain"> <sql> CREATE DOMAIN public.some_domain AS bigint; ALTER DOMAIN public.some_domain OWNER TO test; </sql> <rollback> DROP DOMAIN public.some_domain; </rollback> </changeSet>
рд░реЛрд▓рдмреИрдХ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ
#!/usr/bin/env bash mvn liquibase:update\ -Denv=dev\ -Dliquibase.url="jdbc:postgresql://dev/test?prepareThreshold=0&stringtype=unspecified"\ -Dliquibase.contexts=non-legacy
рддреБрд▓рдирд╛
рд╡рд┐рдХрд╛рд╕ рдореЗрдВ, рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд▓рд┐рдП рджреЛ рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рд╕реЗрдЯрд┐рдВрдЧреНрд╕ (рдпрд╛ рд▓реЙрдиреНрдЪ рдкреИрд░рд╛рдореАрдЯрд░) рдореЗрдВ, рдЖрдкрдХреЛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрджрд░реНрдн рдбреЗрдЯрд╛рдмреЗрд╕ рдФрд░ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред
liquibase.properties
referenceUsername=test referenceUrl=jdbc:postgresql://dev/test_reference
рд╕рд░реНрдХрд┐рдЯ рддреБрд▓рдирд╛
Url рдФрд░ ReferenceUrl рдпреЛрдЬрдирд╛рдУрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ред
#!/usr/bin/env bash mvn liquibase:diff\ -Denv=dev\ -Dliquibase.referenceUrl="jdbc:postgresql://dev/test?prepareThreshold=0"\ -Dliquibase.url="jdbc:postgresql://dev/test_reference?prepareThreshold=0"\ -Dliquibase.diffChangeLogFile=dev/diff.xml
рд╕реЗрд╡рд┐рдВрдЧ рд╕реНрдХреАрдорд╛
рдпрд╣ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдпрд╛ рдмрд┐рдирд╛ рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рд▓рд┐рдХреНрд╡рд┐рдмреЗрд╕ рдПрдХ рдРрд╕реА рдпреЛрдЬрдирд╛ рдХреЛ рдмрдЪрд╛рддрд╛ рд╣реИ рдЬреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдбреЛрдореЗрди рдпрд╛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдкреНрд░рддрд┐рдмрдВрдз рджреЗрдЦреЗрдВ)ред
рдЦрд╛рддреЗ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЗрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛
рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ред
#!/usr/bin/env bash mvn liquibase:generateChangeLog\ -Denv=dev\ -Dliquibase.url="jdbc:postgresql://dev/test_reference?prepareThreshold=0"\ -Dliquibase.outputChangeLogFile=dev/changelog.xml
рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдХреАрдорд╛ рд╕рд╣реЗрдЬрдирд╛
рдореМрдЬреВрджрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕реНрдХреАрдорд╛ рдХреЛ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬрдирд╛ред
#!/usr/bin/env bash mvn liquibase:generateChangeLog\ -Denv=dev\ -Dliquibase.url="jdbc:postgresql://dev/test_reference?prepareThreshold=0"\ -Dliquibase.outputChangeLogFile=dev/changelog.xml
рд╕реАрдорд╛рдПрдВ рдФрд░ рд╕рдорд╕реНрдпрд╛рдПрдВ
рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛
рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ, рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдкрд░рд┐рд╡рд░реНрддрди рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ред
рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд╕реНрддрдВрдн
рд╕реНрд░реЛрдд рдХреЛрдб
рд╡реИрдХрд▓реНрдкрд┐рдХ рд╕рдорд╛рдзрд╛рди
flyway
Liquibase рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЬрд╛рд╡рд╛ рд╕рдореБрджрд╛рдп рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реИ - http://flywaydb.org/documentation
Sqitch
рдкрд░реНрд▓ рд╕рдордХрдХреНрд╖ - http://sqitch.org
FluentMigrator
рдПрдирд╛рд▓реЙрдЧ .Net рдХреЗ рд▓рд┐рдП - https://github.com/schambers/fluentmigrator
DBGeni
рд░реВрдмреА рдХреЗ рд▓рд┐рдП рдПрдирд╛рд▓реЙрдЧ - http://dbgeni.appsintheopen.com/manual.html
рдХреНрд╖реБрдзрд╛
рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛
pom.xml - maven makefile dev liquibase.properties - login/password etc master.xml - changesets
рдХрд┐рд╕реА рдореМрдЬреВрджрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд▓рд┐рдмрд╛рд╕ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
рдЖрдзрд╛рд░ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ
рдЕрджреНрдпрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ
рдЪреЗрдВрдЬ рдЬрдирд░реЗрд╢рди рдкрд░ рдЕрдзрд┐рдХ
рдХрд╕реНрдЯрдо SQL рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ
рдбреЗрдЯрд╛рдмреЗрд╕-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛
<createTable tableName="t_name"> ... <column name="doubleArray" type="DOUBLE_ARRAY"/> ... </createTable> <modifySql dbms="postgresql"> <replace replace="DOUBLE_ARRAY" with="double precision[][]"/> </modifySql>
рдЕрдиреНрдп