Jawaban singkat
Atribut "value" tidak akan berfungsi jika Anda menambahkan batasan bukan-null pada saat pembuatan kolom (ini tidak disebutkan dalam dokumentasi ). SQL yang dihasilkan tidak akan dapat dieksekusi.
Solusi
Solusi yang dijelaskan dalam pertanyaan adalah cara yang harus ditempuh. SQL yang dihasilkan akan menjadi:
-
Tambahkan kolom
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Setel ke nilai bukan nol untuk setiap baris
UPDATE table SET abstract_trimmed = 'No text';
-
Tambahkan batasan NOT NULL
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Mengapa?
Default kolom hanya dimasukkan ke dalam kolom dengan INSERT
. Tag "nilai" akan melakukannya untuk Anda, tetapi setelah kolom ditambahkan. Liquibase mencoba menambahkan kolom dalam satu langkah, dengan NOT NULL
kendala di tempat:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... yang tidak mungkin ketika tabel sudah berisi baris. Itu tidak cukup pintar.
Solusi alternatif
Sejak PostgreSQL 8.0 (jadi hampir selamanya sekarang) alternatifnya adalah menambahkan kolom baru dengan DEFAULT
non-null :
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';