Liquibaseスクリプト()を使用して既存のデータベースをアップグレードすると、データベースがLiquibaseによってアップグレードされたことはありません。foreignKeyConstraintExists同じ参照の詳細は異なる名前の外部キーが存在する場合、前提条件が正しくないと思われる
liquibase.exception.MigrationFailedException: Migration failed for change set ../master.xml::5::ray.chen:
Reason: liquibase.exception.DatabaseException: ORA-02275: such a referential constraint already exists in the table
[Failed SQL: ALTER TABLE CRDM_RCHEN.SOME_TABLE ADD CONSTRAINT SOME_TABLE_FK FOREIGN KEY (COLUMN_2) REFERENCES CRDM_RCHEN.SOME_OTHER_TABLE (COLUMN_1)]
at liquibase.changelog.ChangeSet.execute(ChangeSet.java:605)
at liquibase.changelog.visitor.UpdateVisitor.visit(UpdateVisitor.java:51)
at liquibase.changelog.ChangeLogIterator.run(ChangeLogIterator.java:79)
at liquibase.Liquibase.update(Liquibase.java:214)
at liquibase.Liquibase.update(Liquibase.java:192)
at liquibase.integration.commandline.Main.doMigration(Main.java:1126)
at liquibase.integration.commandline.Main.run(Main.java:184)
at liquibase.integration.commandline.Main.main(Main.java:103)
私はすでにSOME_TABLE_1_FKという名前の外部キーがデータベースに存在する、LiquiBaseをスクリプトとデータベースをダブルチェック。根本的な原因は、LiquibaseスクリプトがSOME_TABLE_FKという名前の外部キーを追加しようとしているが、という名前の外部キーSOME_TABLE_1_FKが、同じ参照の詳細と異なる名前で既に存在していることです。それはデータベースが異なる2つの外部キーを許可していないようだが、参照の詳細は同じです。
この問題に関する解決策やアイデアはありますか?ありがとう。
これは、関連するLiquibaseスクリプトです。 foreignKeyConstraintExists前提条件を使用して、外部キーSOME_TABLE_FKが存在するかどうかを確認し、そうでない場合は追加します。参照の内容は同じであるが名前が異なる外部キーがある場合(上記の場合)チェンジセットが実行され、上記のエラーが発生します。 LiquiBaseをによって提供
<changeSet author="ray.chen" id="5">
<preConditions onFail="MARK_RAN">
<not>
<foreignKeyConstraintExists foreignKeyName="SOME_TABLE_FK" />
</not>
</preConditions>
<addForeignKeyConstraint constraintName="SOME_TABLE_FK" baseTableName="SOME_TABLE" baseColumnNames="COLUMN_2" referencedTableName="SOME_OTHER_TABLE" referencedColumnNames="COLUMN_1" deferrable="false" initiallyDeferred="false" onDelete="RESTRICT" onUpdate="RESTRICT" />
</changeSet>
ありがとうDeendayal Garg。私はあなたの答えを見て記事を提供するまで、カスタム前提条件を書く方法を知らなかった。ありがとう。 –
それは動作していません – Marcel