HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-03-10
1 <p>Теги: postgresql, операции со столбцами</p>
1 <p>Теги: postgresql, операции со столбцами</p>
2 <p>Мы уже рассказывали ранее об особенностях<a>добавления столбцов</a>и<a>изменении типа столбца</a>в<strong>PostgreSQL</strong>. Теперь поговорим об удалении столбцов.</p>
2 <p>Мы уже рассказывали ранее об особенностях<a>добавления столбцов</a>и<a>изменении типа столбца</a>в<strong>PostgreSQL</strong>. Теперь поговорим об удалении столбцов.</p>
3 <h2>Осторожность и еще раз осторожность</h2>
3 <h2>Осторожность и еще раз осторожность</h2>
4 <p>Самое главное, что следует уяснить, -- делать это надо очень осторожно. Обновление каталога требует при удалении столбца полной блокировки таблицы, однако это не приводит к физическому изменению строк. И, например, если в настоящее время этот столбец не используется, его можно безопасно удалить. При этом важно проверить, что на данный столбец не ссылаются какие-нибудь<strong>зависимые объекты</strong>, удалять которые небезопасно. Что это может быть?</p>
4 <p>Самое главное, что следует уяснить, -- делать это надо очень осторожно. Обновление каталога требует при удалении столбца полной блокировки таблицы, однако это не приводит к физическому изменению строк. И, например, если в настоящее время этот столбец не используется, его можно безопасно удалить. При этом важно проверить, что на данный столбец не ссылаются какие-нибудь<strong>зависимые объекты</strong>, удалять которые небезопасно. Что это может быть?</p>
5 <p>Например, любые индексы, использующие этот столбец, должны удалятся отдельно с применением безопасного<strong>DROP INDEX CONCURRENTLY</strong>. В обратном случае, они автоматически удалятся вместе со столбцом, причем в течение всего этого времени будет работать блокировка уровня<strong>ACCESS EXCLUSIVE</strong>. Однако всегда можно выполнить проверку на предмет того, есть ли у вас данные объекты, -- для этого нужен запрос<strong>pg_depend4</strong>.</p>
5 <p>Например, любые индексы, использующие этот столбец, должны удалятся отдельно с применением безопасного<strong>DROP INDEX CONCURRENTLY</strong>. В обратном случае, они автоматически удалятся вместе со столбцом, причем в течение всего этого времени будет работать блокировка уровня<strong>ACCESS EXCLUSIVE</strong>. Однако всегда можно выполнить проверку на предмет того, есть ли у вас данные объекты, -- для этого нужен запрос<strong>pg_depend4</strong>.</p>
6 <h2>И еще один совет</h2>
6 <h2>И еще один совет</h2>
7 <p>Прежде, чем выполнять на проде запуск ALTER TABLE ... DROP COLUMN ..., надо убедиться, что окончательно убраны все ссылки на данный столбец в технической документации и программном коде. Это позволит вам безопасно откатиться к релизам, которые были выпущены до удаления столбца.</p>
7 <p>Прежде, чем выполнять на проде запуск ALTER TABLE ... DROP COLUMN ..., надо убедиться, что окончательно убраны все ссылки на данный столбец в технической документации и программном коде. Это позволит вам безопасно откатиться к релизам, которые были выпущены до удаления столбца.</p>
8 <p><strong>Примечание</strong>: удаление столбца потребует обновления всех триггеров, функций, представлений и т. д., ранее на этот столбец завязанных.</p>
8 <p><strong>Примечание</strong>: удаление столбца потребует обновления всех триггеров, функций, представлений и т. д., ранее на этот столбец завязанных.</p>
9 <p><em>По материалам статьи "<a>PostgreSQL at Scale: Database Schema Changes Without Downtime</a>".</em></p>
9 <p><em>По материалам статьи "<a>PostgreSQL at Scale: Database Schema Changes Without Downtime</a>".</em></p>
10  
10