2017-05-28 15 views
2

私はOracleからPostgreSQLに移行しています。 私たちはしばらくの間、Liquibaseに移行しましたが、最初から移行していません。今私は、データベースを完全に展開し、そこでデータを転送するために、移行の追加と適用に取り組んでいます。作成テーブルのliquibaseの制約の参照

これで、別のテーブルに関連付けられた制約を持つ列を持つテーブルを作成しないというような問題が発生しました。この制約は、制約内のテーブルの前に明示的に指定されたスキームがあるため選択されません。

指定されていないスキームのテーブルの制約で、デフォルトのスキームが使用されたことを指定する方法はありますか?ここ 3.5.3

Mavenのプラグインを LiquiBaseを-達人 - プラグインを使用し

プロパティである:ここ

Url: jdbc: postgresql: //192.168.1.1: 5432/postgres 
DefaultSchemaName: ist 
ReferencedTableSchemaName: ist 
Username: test 
Password: 123 
Verbose: true 
DropFirst: false 

移行片

 - createTable: 
        TableName: opr_possibilities 
        Remarks: Operator capability map 
        Columns: 
        - column: 
            Name: id 
            Type: number (11) 
            Remarks: ID 
            Constraints: 
              Nullable: false 
              PrimaryKey: true 
        - column: 
            Name: operator_id 
            Type: number (11) 
            Remarks: Operator ID 
            Constraints: 
              Nullable: false 
              ForeignKeyName: fk_possibility_operator 
              References: ds_obj_opr (id) 
# ReferencedTableName: ds_obj_opr 
# ReferencedColumnNames: id 

ある移行は、このような要求を生成します:

CREATE TABLE ist.opr_possibilities (
     id numeric(11) NOT NULL, 
     operator_id numeric(11) NOT NULL, 
     begin_date date DEFAULT NOW() NOT NULL, 
     end_date date DEFAULT NOW() NOT NULL, 
     duty BOOLEAN DEFAULT FALSE NOT NULL, 
     status numeric(4) DEFAULT 0 NOT NULL, 
     type numeric(4) DEFAULT 0 NOT NULL, 
     remarks VARCHAR(255), 
     CONSTRAINT PK_OPR_POSSIBILITIES PRIMARY KEY (id), 
     CONSTRAINT fk_possibility_operator FOREIGN KEY (operator_id) REFERENCES ds_obj_opr(id) 
) 

この問題をエレガントに解決する方法を教えてください。 ありがとうございます。

答えて

0

あなたは

References: ist.ds_obj_opr(id) 

を言うことができますしかし、私はあなたにエレガント&hellipことをカウントしないと思います。

その場合は別の方法として、あなたはどこでも、あなたはDefaultSchemaNameを使用するのではなく、変更履歴やで<property>タグでスキーマを指定することができなかったこと

References: ${schema}.ds_obj_opr(id) 

のように、パラメータとしてスキーマを指定することができ呼び出し中は-Dschema=istです。

+0

はい、あなたは正しいです、私はこれらの決定をエレガントであるとは考えていませんでした) しかし、私はこの問題はバグだと思います。 「参照」に「defaultSchemaName」が使用されていないのはなぜですか? "addForeignKeyConstraint"と同様に "constraintName"は "objectQuotingStrategy" = "QUOTE_ALL_OBJECTS"に注意していません。 しかし、私はマイグレーションでネイティブの問い合わせが使用されているため、スキーマ指定を変数で適用しました。 答えに感謝します) – Alex

関連する問題