Resposta curta
O atributo "value" não funcionará se você estiver adicionando uma restrição não nula no momento da criação da coluna (isso não é mencionado no documentação ). O SQL gerado não poderá ser executado.
Solução
A solução alternativa descrita na pergunta é o caminho a seguir. O SQL resultante será:
-
Adicione a coluna
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Defina-o como um valor não nulo para cada linha
UPDATE table SET abstract_trimmed = 'No text';
-
Adicione a restrição NOT NULL
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Por quê?
Um padrão de coluna só é inserido na coluna com um
INSERT
. A tag "value" fará isso para você, mas depois a coluna é adicionada. Liquibase tenta adicionar a coluna em uma etapa, com o NOT NULL
restrição em vigor:ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... o que não é possível quando a tabela já contém linhas. Simplesmente não é inteligente o suficiente.
Solução alternativa
Desde o PostgreSQL 8.0 (tão quase para sempre até agora) uma alternativa seria adicionar a nova coluna com um
DEFAULT
não nulo :ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';
O manual: