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