В PostgreSQL такого механизма нет.
Тем не менее, вы все равно можете избежать чрезмерных последствий такого изменения таблицы.
Следующий оператор получает исключительную блокировку доступа к таблице на время оператора / транзакции:
ALTER TABLE your_table
ADD COLUMN new_column integer NOT NULL DEFAULT 0;
Этот оператор изменяет каталог, затем переписывает всю таблицу так, чтобы новый столбец содержал значение по умолчанию во всех строках. Если в таблице много строк и доступ к ней осуществляется достаточно часто, это может вызвать некоторые временные проблемы.
Чтобы избежать этого, старайтесь держать эксклюзивную блокировку как можно короче:
ALTER TABLE your_table
ADD COLUMN new_column integer;
ALTER TABLE your_table
ALTER COLUMN new_column SET DEFAULT 0;
Поскольку это в основном только (фактически два) изменения в каталоге (никаких изменений данных не происходит), оно будет выполнено довольно быстро. Затем, в зависимости от ваших потребностей и использования таблицы, вы можете обновить новый столбец до значения по умолчанию за один шаг или партиями, а когда закончите, установите для столбца значение NOT NULL
.
Обновление о желании сбывается: PostgreSQL 11 будет иметь эту функцию. См. Https://www.depesz.com/2018/04/04/waiting-for-postgresql-11-fast-alter-table-add-column-with-a-non-null-default/ для получения дополнительной информации.