Senior
56
Come aggiungere una nuova colonna con valore predefinito in una tabella in produzione senza blocchi e downtime? Specificità di PostgreSQL.
Le aziende dove è stato chiesto
ТБанк
Risposta dell'AI
sobes.tech AI
В PostgreSQL начиная с версии 11 можно добавить новую колонку с дефолтным значением без блокировок и долгих операций, если дефолт — это константа (не выражение). Это связано с тем, что раньше добавление колонки с дефолтом приводило к полному переписыванию таблицы, что блокировало её.
Правильный способ:
ALTER TABLE your_table ADD COLUMN new_column type DEFAULT your_default_value;
Если вы используете PostgreSQL 11+, то это выполнится быстро и без блокировок, так как дефолтное значение не записывается сразу в каждую строку, а используется на уровне метаданных.
Если версия ниже, то рекомендуют:
- Добавить колонку без дефолта и с NULL:
ALTER TABLE your_table ADD COLUMN new_column type;
-
Обновить данные партиями (batch update) в фоне, чтобы заполнить дефолтное значение.
-
Установить дефолтное значение для колонки:
ALTER TABLE your_table ALTER COLUMN new_column SET DEFAULT your_default_value;
- Сделать колонку NOT NULL, если нужно.
Таким образом, на продакшене минимизируется блокировка и простой.