Kort antwoord
Het kenmerk "value" werkt niet als u een niet-null-beperking toevoegt op het moment dat de kolom wordt gemaakt (dit wordt niet vermeld in de documentatie ). De gegenereerde SQL kan niet worden uitgevoerd.
Tussenoplossing
De oplossing die in de vraag wordt beschreven, is de juiste keuze. De resulterende SQL is:
-
Voeg de kolom toe
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Stel het in op een niet-null-waarde voor elke rij
UPDATE table SET abstract_trimmed = 'No text';
-
Voeg de NOT NULL-beperking toe
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Waarom?
Een standaardkolom wordt alleen ingevoegd in de kolom met een INSERT
. De tag "value" doet dat voor u, maar na de kolom wordt toegevoegd. Liquibase probeert de kolom in één stap toe te voegen, met de NOT NULL
beperking aanwezig:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... wat niet mogelijk is wanneer de tabel al rijen bevat. Het is gewoon niet slim genoeg.
Alternatieve oplossing
Sinds PostgreSQL 8.0 (dus bijna voor altijd) zou een alternatief zijn om de nieuwe kolom toe te voegen met een niet-null DEFAULT
:
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';