DATABASECHANGELOG
라는 테이블로 changeset 트래킹plugins { id 'org.liquibase.gradle' version '2.0.3' } // JDBC 드라이버 등 관련 의존성을 일일이 따로 걸어주거나 아래처럼 runtime에서 그대로 가져온다. // 공식문서에는 runtime 을 상속하라고 돼 있지만 실제로는 runtimeClasspath 여야 작동했음. Gradle 6.5.x configurations { liquibaseRuntime.extendsFrom runtimeClasspath } // java 9 이상 버전 사용시에 jaxb 명시적 설정 필요. liquibaseRuntime group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' // 혹시 logback 을 안사용한다면 추가 필요. liquibaseRuntime("ch.qos.logback:logback-core:1.2.3") liquibaseRuntime("ch.qos.logback:logback-classic:1.2.3") // hibernate diff 모듈을 사용한다면, liquibaseRuntime 'org.liquibase.ext:liquibase-hibernate5:3.6' liquibaseRuntime sourceSets.main.output liquibase { activities { main { changeLogFile 'src/migration/changelog-main.xml' url "jdbc:url..." username "username" password "password" } } }
changelog-main.xml
<?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd"> <include file="com/example/db/changelog/db.changelog-1.0.xml"/> <include file="com/example/db/changelog/db.changelog-1.1.xml"/> <include file="com/example/db/changelog/db.changelog-2.0.xml"/> </databaseChangeLog>
changelog-1.0.xml
… <?xml version="1.0" encoding="UTF-8"?> <databaseChangeLog xmlns="http://www.liquibase.org/xml/ns/dbchangelog" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.8.xsd"> <changeSet author="authorName" id="changelog-1.0"> <createTable tableName="TablesAndTables"> <column name="COLUMN1" type="TEXT"> <constraints nullable="true" primaryKey="false" unique="false"/> </column> </createTable> </changeSet> </databaseChangeLog>
;
인데, 이 경우 Stored Procedure 구문등에 ;
가 있으면 구문을 나눠서 실행해서 문법 오류가 발생한다.endDelimiter
속성을 다른 값으로 변경하고, 해당값을 여러 구문을 구분하는 요소로 사용하도록 한다.<changeSet author="liquibase-docs" id="sql-example"> <sql dbms="!h2, oracle, mysql" endDelimiter="\nGO" splitStatements="true" stripComments="true"> <comment>What about Bob?</comment> <![CDATA[ insert into person (name) values ('Bob') ]]></sql> </changeSet>