Kort svar
"Værdi"-attributten fungerer ikke, hvis du tilføjer en ikke-nul-begrænsning på tidspunktet for oprettelse af kolonnen (dette er ikke nævnt i dokumentation ). Den genererede SQL vil ikke være i stand til at udføre.
Løsning
Løsningen beskrevet i spørgsmålet er vejen at gå. Den resulterende SQL vil være:
-
Tilføj kolonnen
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Indstil den til en ikke-nul værdi for hver række
UPDATE table SET abstract_trimmed = 'No text';
-
Tilføj NOT NULL-begrænsningen
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Hvorfor?
En kolonnestandard indsættes kun i kolonnen med en INSERT
. "Værdi"-tagget vil gøre det for dig, men efter kolonnen tilføjes. Liquibase forsøger at tilføje kolonnen i ét trin med NOT NULL
begrænsning på plads:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... hvilket er ikke muligt når tabellen allerede indeholder rækker. Det er bare ikke smart nok.
Alternativ løsning
Siden PostgreSQL 8.0 (så næsten for evigt efterhånden) ville et alternativ være at tilføje den nye kolonne med en ikke-null DEFAULT
:
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';