Kurze Antwort
Das Attribut "value" funktioniert nicht, wenn Sie zum Zeitpunkt der Spaltenerstellung eine Nicht-Null-Einschränkung hinzufügen (dies wird nicht in der Dokumentation ). Das generierte SQL kann nicht ausgeführt werden.
Problemumgehung
Die in der Frage beschriebene Problemumgehung ist der richtige Weg. Das resultierende SQL lautet:
-
Fügen Sie die Spalte hinzu
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Legen Sie für jede Zeile einen Nicht-Null-Wert fest
UPDATE table SET abstract_trimmed = 'No text';
-
Fügen Sie die Einschränkung NOT NULL hinzu
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Warum?
Ein Spaltenvorschlag wird nur mit einem INSERT
in die Spalte eingefügt . Das "value"-Tag erledigt das für Sie, aber nach Die Spalte wird hinzugefügt. Liquibase versucht, die Spalte in einem Schritt mit NOT NULL
hinzuzufügen Einschränkung vorhanden:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... was nicht möglich ist wenn die Tabelle bereits Zeilen enthält. Es ist einfach nicht schlau genug.
Alternative Lösung
Seit PostgreSQL 8.0 (also mittlerweile fast für immer) wäre eine Alternative, die neue Spalte mit einem Nicht-Null-DEFAULT
hinzuzufügen :
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';