簡単な答え
列の作成時にnull以外の制約を追加する場合、「value」属性は機能しません(これは、ドキュメント )。生成されたSQLは実行できません。
回避策
質問で説明されている回避策は、進むべき道です。結果のSQLは次のようになります。
-
列を追加
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
すべての行でnull以外の値に設定します
UPDATE table SET abstract_trimmed = 'No text';
-
NOTNULL制約を追加します
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
なぜですか?
列のデフォルトは、INSERT
を使用して列にのみ挿入されます 。 「value」タグはそれを行いますが、後 列が追加されます。 Liquibaseは、NOT NULL
を使用して、1つのステップで列を追加しようとします 制約があります:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
...これは不可能です テーブルにすでに行が含まれている場合。賢くないだけです。
代替ソリューション
PostgreSQL 8.0以降(今ではほぼ永久に)、代替手段は、null以外のDEFAULT
を使用して新しい列を追加することです。 :
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';