8

現在取り組んでいるこのプロジェクトにはLiquibaseを使用しており、すべての変更ログは 1 つの大きな XML ファイルにまとめられています。残念ながら、このファイルは大きくなりすぎています。元のファイルと新しいファイルを含む「マスター」ファイルを導入したいと考えています。

古い構造:

/db/changesets-from-beginning-of-time.xml

新しい構造:

/db/changesets/changesets-from-beginning-of-time.xml
/db/changesets/changesets-v.1.2.3.xml
/db/changesets/changeset-master.xml

changesets-*-filesの内容は単なる changeset xml ですが、changeset-master.xmlファイルは次のようになります。

<databaseChangeLog xmlns="...skipped...">
    <include file="changesets-from-beginning-of-time.xml" 
              relativeToChangelogFile="true"/>
    <include file="changesets-v1.2.3.xml" 
              relativeToChangelogFile="true"/>
</databaseChangeLog>

現在、DATABASECHANGELOG私のデータベースのテーブルは古いファイルを参照しているため、古い変更セットが再度実行されます。

Liquibase documentationによると、各変更セットは組み合わせによって一意に識別され[filepath/-name]:::[id]:::[author]ます。これは私にとって最適ではありません。

私の質問は、liquibase のセットアップを壊してデータベースを空にすることなく、ファイル構造をリファクタリングするにはどうすればよいですか?

4

3 に答える 3

12

また、liquibase には「logicalFilePath」と呼ばれるものがあり、次のように説明されています。

変更セットの一意の識別子を作成するときに、ファイル名とパスをオーバーライドするために使用します。変更ログを移動または名前変更する場合に必要です。

たぶんそれが役立ちます。私の記憶が正しければ、このオプションを使用すると、識別子への完全なファイル パスを含めないようにすることができます。

(ただし、これはフォーマットされた sql ファイルでは機能しません。問題を参照してください: Liquibase Jiraの CORE-915 。

于 2013-09-13T11:40:07.870 に答える
8

アップストリームとユーザーの間の古い会話を指摘したい:

http://forum.liquibase.org/topic/why-does-the-change-log-contain-the-file-name

アップストリームの引数は弱く、完全なファイルパスを中継するというばかげた決定を下していると思います。経由でファイルパスを修正するという最初の考えですCLASSPATHが、あなたの要求はこれも間違っていることを示しました。

上流の開発者は、列を直接更新して、DATABASECHANGELOG.FILENAME壊れたエントリを完全パスで修正することを提案しています。

DATABASECHANGELOG.MD5SUMハッシュを設定nullすると、次の LiquiBase の実行時にハッシュの再計算がトリガーされます。ハッシュ アルゴリズムはファイル パスを入力として使用するため、これを行う必要があります。

logicalFilePath最上位の XML タグに適用できます。

<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.4.xsd"
                   logicalFilePath="legacy.xml">
    ...
</databaseChangeLog>

または各変更セットによってオーバーライドされる場合があります。

<changeSet author="admin" id="fix-25" logicalFilePath="fix.xml">
   ...
</changeSet>

SQL 構文にはlogicalFilePath、最上位ファイル マークの属性もあります (v3.3 で実装)。

--liquibase formatted sql  logicalFilePath:legacy.sql

各チェンジセットマークでオーバーライドされる場合があります::

--changeset db-maint:tune-indexed  logicalFilePath:other.sql

設定が有効であることを確認するには、次を使用します。

mvn liquibase:changelogSyncSQL

とレビューしますmigration.sql。対応pom.xml部分:

<plugin>
    <groupId>org.liquibase</groupId>
    <artifactId>liquibase-maven-plugin</artifactId>
    <version>${liquibase.version}</version>
    <configuration>
        <changeLogFile>${basedir}/src/main/resources/sql/master.xml</changeLogFile>
        <propertyFile>${liquibase.profile}</propertyFile>
        <promptOnNonLocalDatabase>false</promptOnNonLocalDatabase>

        <migrationSqlOutputFile>migration.sql</migrationSqlOutputFile>
    </configuration>
</plugin>
于 2015-12-22T20:08:57.740 に答える