Sobes.tech
Back to questions
Senior
7

Как добавить новую колонку с дефолтным значением в таблицу на проде без блокировок и простоя? Специфика PostgreSQL.

Companies where asked
ТБанк

Answer from AI

sobes.tech AI

В PostgreSQL начиная с версии 11 можно добавить новую колонку с дефолтным значением без блокировок и долгих операций, если дефолт — это константа (не выражение). Это связано с тем, что раньше добавление колонки с дефолтом приводило к полному переписыванию таблицы, что блокировало её.

Правильный способ:

ALTER TABLE your_table ADD COLUMN new_column type DEFAULT your_default_value;

Если вы используете PostgreSQL 11+, то это выполнится быстро и без блокировок, так как дефолтное значение не записывается сразу в каждую строку, а используется на уровне метаданных.

Если версия ниже, то рекомендуют:

  1. Добавить колонку без дефолта и с NULL:
ALTER TABLE your_table ADD COLUMN new_column type;
  1. Обновить данные партиями (batch update) в фоне, чтобы заполнить дефолтное значение.

  2. Установить дефолтное значение для колонки:

ALTER TABLE your_table ALTER COLUMN new_column SET DEFAULT your_default_value;
  1. Сделать колонку NOT NULL, если нужно.

Таким образом, на продакшене минимизируется блокировка и простой.