Почему по умолчанию не используется, когда я установил ненулевое ограничение?
У меня есть таблица в базе данных postgresql.
Для данного столбца я устанавливаю значение по умолчанию, затем хочу, чтобы оно было NOT NULL
:
ALTER TABLE "order" ALTER COLUMN last_bill_date SET DEFAULT '-Infinity';
ALTER TABLE "order" ALTER COLUMN last_bill_date SET NOT NULL;
Но второе утверждение не удается:
ERROR: column "last_bill_date" contains null values
Зачем DEFAULT
значение не используется, когда NOT NULL
применяется для этого столбца?
1 ответ
Решение
Согласно документации:
DEFAULT default_expr
(...)
Выражение по умолчанию будет использоваться в любой операции вставки, в которой не указано значение для столбца. Если для столбца нет значения по умолчанию, то по умолчанию используется значение NULL.
Измененное выражение по умолчанию не может изменять строки, уже существующие в таблице, вы должны сделать это перед установкой ограничения not null:
update "order"
set last_bill_date = '-Infinity'
where last_bill_date is null