Krátká odpověď
Atribut "value" nebude fungovat, pokud přidáváte omezení nenulové v době vytváření sloupce (toto není zmíněno v dokumentaci ). Vygenerované SQL nebude možné provést.
Řešení
Řešení popsané v otázce je cesta. Výsledné SQL bude:
-
Přidejte sloupec
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Nastavte jej na nenulovou hodnotu pro každý řádek
UPDATE table SET abstract_trimmed = 'No text';
-
Přidejte omezení NOT NULL
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Proč?
Výchozí sloupec se vloží pouze do sloupce pomocí INSERT
. Značka „value“ to udělá za vás, ale po sloupec je přidán. Liquibase se pokusí přidat sloupec v jednom kroku s NOT NULL
omezení na místě:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... což není možné když tabulka již obsahuje řádky. Prostě to není dost chytré.
Alternativní řešení
Od PostgreSQL 8.0 (tedy téměř navždy) by alternativou bylo přidat nový sloupec s nenulovým DEFAULT
:
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';