Операции над таблицей в PostgreSQL | OTUS

Курсы

Программирование
Highload Architect Node.js Developer React.js Developer Java Developer. Professional Android Developer. Basic Microservice Architecture Специализация Java-разработчик C++ Developer. Basic Специализация Fullstack developer JavaScript Developer. Professional Unity Game Developer. Basic Framework Laravel Алгоритмы и структуры данных Специализация PHP Developer C# Developer. Professional C# Developer. Basic Буткемп Frontend Developer Golang Developer. Professional iOS Developer. Basic Специализация Python Developer Архитектура и шаблоны проектирования MS SQL Server Developer Software Architect Rust Developer Базы данных Разработчик на Spring Framework Vue.js разработчик Разработчик IoT Подготовка к сертификации Oracle Java Programmer (OCAJP) Unity Game Developer. Professional PostgreSQL Cloud Solutions VR/AR - разработчик
Специализации Курсы в разработке Подготовительные курсы Подписка
+7 499 938-92-02

Операции над таблицей в PostgreSQL

В этой статье рассмотрим такие операции, как создание, удаление и переименование таблицы.

postgres_underconstruction_1-1801-b15fa0.jpg

Создание таблицы

В общем случае операция добавления таблицы является одной из немногих операций, о которых не стоит особо переживать. Дело в том, что изменяемый нами объект чисто технически не способен в этот самый момент использоваться.

Большая часть параметров по созданию таблицы не влияют на другие объекты вашей БД. А добавление внешнего ключа в случае определения таблицы заставит СУБД получить на упомянутой таблице блокировку уровня SHARE ROW EXCLUSIVE. Таким образом будут остановлены DDL-запросы, как и модификации строк. Но несмотря на тот факт, что данная блокировка не должна быть чересчур долгой, то о ней надо помнить, впрочем, как и о любой другой операции, которая вызывает блокировку. Следовательно, хорошей практикой является разделение этих 2-х операций: сначала создайте таблицу и лишь потом добавляйте внешний ключ.

Удаление таблицы

Эта операция, как известно, требует блокировки уровня ACCESS EXCLUSIVE. Конечно, если таблица не используется, удалить ее можно вполне спокойно. Однако до того, как вы выполните команду DROP TABLE..., проверьте код и документацию, чтобы убедиться, что все упоминания о таблице стерты на самом деле. Для перепроверки запросите у СУБД статистику использования таблицы, применяя представление pg_stat_user_tables2.

Переименование таблицы

Переименование таблицы требует уровня ACCESS EXCLUSIVE. Вряд ли ваш код сможет безопасно обработать эту операцию непосредственно на лету — все это станет возможным лишь в том случае, если в таблицу никто не пишет, как и не запрашивает из нее каких-либо данных.

На практике желательно избегать переименований везде, где возможно. Однако когда переименование таблицы действительно необходимо, то вот советы для обеспечения безопасности:

  1. Создайте новую таблицу с той же схемой, как и предыдущая.
  2. Скопируйте данные в новую таблицу из старой.
  3. Создайте триггеры к старой таблице на INSERT и UPDATE, чтобы в случае ее применения поддерживалось актуальное состояние новой таблицы.
  4. Начните применять новую таблицу.

Возможны и другие подходы, которые основаны на использовании представлений (views) либо правил (RULE). Они тоже могут пригодиться -- все будет зависеть от нужной вам производительности.

5f32c1065e3fe18545245e9b_tips_postgresql_arrays_header_1-1801-ced0bb.png

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

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

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

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

Автор
0 комментариев
Для комментирования необходимо авторизоваться