Кратък отговор
Атрибутът „стойност“ няма да работи, ако добавяте ограничение, което не е нула, по време на създаването на колоната (това не е споменато в документация ). Генерираният SQL няма да може да се изпълни.
Заобиколно решение
Заобиколното решение, описано във въпроса, е правилният начин. Полученият SQL ще бъде:
-
Добавете колоната
ALTER TABLE layer ADD COLUMN abstract_trimmed varchar(455);
-
Задайте ненулева стойност за всеки ред
UPDATE table SET abstract_trimmed = 'No text';
-
Добавете ограничението NOT NULL
ALTER TABLE layer ALTER COLUMN abstract_trimmed SET NOT NULL;
Защо?
Колона по подразбиране се вмъква само в колоната с INSERT
. Тагът „стойност“ ще направи това вместо вас, но след колоната се добавя. Liquibase се опитва да добави колоната в една стъпка с NOT NULL
ограничение на място:
ALTER TABLE layer ADD abstract_trimmed VARCHAR(455) NOT NULL;
... което е невъзможно когато таблицата вече съдържа редове. Просто не е достатъчно умно.
Алтернативно решение
От PostgreSQL 8.0 (така че вече почти завинаги) алтернатива би била да добавите новата колона с ненулев DEFAULT
:
ALTER TABLE layer
ADD COLUMN abstract_trimmed varchar(455) NOT NULL DEFAULT 'No text';