Почему по умолчанию не используется, когда я установил ненулевое ограничение?

У меня есть таблица в базе данных 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
Другие вопросы по тегам