Risposta breve
L'attributo "value" non funzionerà se stai aggiungendo un vincolo non nullo al momento della creazione della colonna (questo non è menzionato in documentazione ). L'SQL generato non potrà essere eseguito.
Soluzione alternativa
La soluzione descritta nella domanda è la strada da percorrere. L'SQL risultante sarà:
-
Aggiungi la colonna
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Impostalo su un valore non nullo per ogni riga
UPDATE table SET abstract_trimmed = 'No text';
-
Aggiungi il vincolo NOT NULL
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Perché?
Una colonna predefinita viene inserita solo nella colonna con un INSERT
. Il tag "value" lo farà per te, ma dopo la colonna viene aggiunta. Liquibase prova ad aggiungere la colonna in un solo passaggio, con il NOT NULL
vincolo in atto:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... che non è possibile quando la tabella contiene già righe. Semplicemente non è abbastanza intelligente.
Soluzione alternativa
Da PostgreSQL 8.0 (quindi quasi per sempre ormai) un'alternativa sarebbe aggiungere la nuova colonna con un DEFAULT
non nullo :
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';