1

私はブランチに取り組んでおり、たとえばテーブルXの列を削除する必要があります。変更を追加し、その特定のブランチに適しています。次に、その列を引き続き必要とし、その変更をロールバックする必要がある別のブランチに切り替えます。 。このようなデータベースには、ブランチごとに多くの変更があります。

ブランチごとに新しいchangelogxmlを追加し、それをマスターchangelogxmlに含めます。明らかに、別のブランチに切り替えると、前のブランチのchanglog xmlはワークスペースになくなり、liquibaseは実際の変更セットをデータベースに保存せず、名前と適用されたときに変更をロールバックできません。自動的。

Liquibaseサーブレットを使用して、アプリケーションの起動時に変更を適用しています。

Liquibaseの専門家、この問題の簡単な解決策はすでに実装されていますか?ありがとうございました!

4

1 に答える 1

3

コードのブランチ間で単一のデータベースインスタンスを共有することは困難です。複数の開発者間でデータベースを共有しようとすると、同じ種類の問題が発生します。

Liquibaseは、データベース変更のマスターレコードとしてファイルベースのチェンジセットを使用するように設計されています。特別なテーブルDATABASECHANGELOGは、どのチェンジセットがデータベースインスタンスに適用されたかを追跡するように設計されています。ブランチを切り替えると、予測できない多くの方法で混乱が生じます。たとえば、次のようになります。

  • チェンジセットがありません
  • コンテンツが変更されたチェンジセット(チェックサムエラーにつながる)。
  • ..。

ブランチを切り替えるたびに、データベースを更新または再同期することをお勧めします。

liquibase dropAll
liquibase update

あなたの場合、liquibaseサーブレットは起動時にデータベースを更新するため、2番目の操作はおそらく不要です。

データの損失が心配な場合は、コンテキストを使用してテストデータを制御します。

アップデート

Mavenを使用している場合、この「再同期」操作はMavenから次のように呼び出すことができます。

mvn -Presync compile

このプロファイルは、POM内で次のように構成されます。

    <profile>
        <id>resync</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.liquibase</groupId>
                    <artifactId>liquibase-maven-plugin</artifactId>
                    <version>${liquibase.plugin.version}</version>
                    <executions>
                        <execution>
                            <phase>process-resources</phase>
                            <configuration>
                                <url>${liquibase.url}</url>
                                <driver>${liquibase.driver}</driver>
                                <username>${liquibase.username}</username>
                                <password>${liquibase.password}</password>
                                <changeLogFile>${liquibase.changeLogFile}</changeLogFile>
                                <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>
                            </configuration>
                            <goals>
                                <goal>dropAll</goal>
                                <goal>update</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>
于 2012-04-21T17:09:47.810 に答える