Respuesta corta
El atributo "valor" no funcionará si agrega una restricción no nula en el momento de la creación de la columna (esto no se menciona en documentación ). El SQL generado no podrá ejecutarse.
Solución alternativa
La solución alternativa descrita en la pregunta es el camino a seguir. El SQL resultante será:
-
Agregar la columna
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Establézcalo en un valor no nulo para cada fila
UPDATE table SET abstract_trimmed = 'No text';
-
Agregue la restricción NOT NULL
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
¿Por qué?
Un valor predeterminado de columna solo se inserta en la columna con un INSERT
. La etiqueta "valor" hará eso por ti, pero después se agrega la columna. Liquibase intenta agregar la columna en un solo paso, con NOT NULL
restricción en su lugar:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... lo cual no es posible cuando la tabla ya contiene filas. Simplemente no es lo suficientemente inteligente.
Solución alternativa
Desde PostgreSQL 8.0 (así que casi para siempre), una alternativa sería agregar la nueva columna con un DEFAULT
no nulo :
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';