Kort svar
Attributet "value" kommer inte att fungera om du lägger till en icke-null-begränsning när kolumnen skapas (detta nämns inte i dokumentation ). SQL som genereras kommer inte att kunna köras.
Lösning
Lösningen som beskrivs i frågan är vägen att gå. Den resulterande SQL-en blir:
-
Lägg till kolumnen
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Ställ in det till ett icke-nullvärde för varje rad
UPDATE table SET abstract_trimmed = 'No text';
-
Lägg till NOT NULL-begränsningen
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Varför?
En kolumnstandard infogas endast i kolumnen med en INSERT
. Taggen "värde" gör det åt dig, men efter kolumnen läggs till. Liquibase försöker lägga till kolumnen i ett steg, med NOT NULL
begränsning på plats:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... vilket är inte möjligt när tabellen redan innehåller rader. Det är bara inte tillräckligt smart.
Alternativ lösning
Eftersom PostgreSQL 8.0 (så nästan för alltid vid det här laget) skulle ett alternativ vara att lägga till den nya kolumnen med en icke-null DEFAULT
:
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';