Удаление столбца в PostgreSQL
Мы уже рассказывали ранее об особенностях добавления столбцов и изменении типа столбца в PostgreSQL. Теперь поговорим об удалении столбцов.
Осторожность и еще раз осторожность
Самое главное, что следует уяснить, -- делать это надо очень осторожно. Обновление каталога требует при удалении столбца полной блокировки таблицы, однако это не приводит к физическому изменению строк. И, например, если в настоящее время этот столбец не используется, его можно безопасно удалить. При этом важно проверить, что на данный столбец не ссылаются какие-нибудь зависимые объекты, удалять которые небезопасно. Что это может быть?
Например, любые индексы, использующие этот столбец, должны удалятся отдельно с применением безопасного DROP INDEX CONCURRENTLY. В обратном случае, они автоматически удалятся вместе со столбцом, причем в течение всего этого времени будет работать блокировка уровня ACCESS EXCLUSIVE. Однако всегда можно выполнить проверку на предмет того, есть ли у вас данные объекты, -- для этого нужен запрос pg_depend4.
И еще один совет
Прежде, чем выполнять на проде запуск
Примечание: удаление столбца потребует обновления всех триггеров, функций, представлений и т. д., ранее на этот столбец завязанных.
По материалам статьи «PostgreSQL at Scale: Database Schema Changes Without Downtime».