Удаление столбца в PostgreSQL | OTUS
Запланируйте обучение с выгодой в Otus!
-15% на все курсы до 27.11 Забрать скидку! →
Выбрать курс

Удаление столбца в PostgreSQL

Мы уже рассказывали ранее об особенностях добавления столбцов и изменении типа столбца в PostgreSQL. Теперь поговорим об удалении столбцов.

3-20219-a2062d.png

Осторожность и еще раз осторожность

Самое главное, что следует уяснить, -- делать это надо очень осторожно. Обновление каталога требует при удалении столбца полной блокировки таблицы, однако это не приводит к физическому изменению строк. И, например, если в настоящее время этот столбец не используется, его можно безопасно удалить. При этом важно проверить, что на данный столбец не ссылаются какие-нибудь зависимые объекты, удалять которые небезопасно. Что это может быть?

Например, любые индексы, использующие этот столбец, должны удалятся отдельно с применением безопасного DROP INDEX CONCURRENTLY. В обратном случае, они автоматически удалятся вместе со столбцом, причем в течение всего этого времени будет работать блокировка уровня ACCESS EXCLUSIVE. Однако всегда можно выполнить проверку на предмет того, есть ли у вас данные объекты, -- для этого нужен запрос pg_depend4.

И еще один совет

Прежде, чем выполнять на проде запуск ALTER TABLE ... DROP COLUMN ..., надо убедиться, что окончательно убраны все ссылки на данный столбец в технической документации и программном коде. Это позволит вам безопасно откатиться к релизам, которые были выпущены до удаления столбца.

Примечание: удаление столбца потребует обновления всех триггеров, функций, представлений и т. д., ранее на этот столбец завязанных.

postgresql_1-20219-992392.jpg

По материалам статьи «PostgreSQL at Scale: Database Schema Changes Without Downtime».

Не пропустите новые полезные статьи!

Спасибо за подписку!

Мы отправили вам письмо для подтверждения вашего email.
С уважением, OTUS!

Автор
0 комментариев
Для комментирования необходимо авторизоваться
Популярное
Сегодня тут пусто
Черная пятница в Otus! ⚡️
Скидка 15% на все курсы до 27.11 →