SQL Academy · Урок

Отсоединение и присоединение секций

Используйте ATTACH PARTITION и DETACH PARTITION, чтобы добавлять и удалять секции без блокировки чтения

Урок 3 из 413 шагов

«Отсоединение и присоединение секций» — бесплатный урок SQL Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения SQL Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс SQL Academy содержит 4 уроков всего.

Зачем отсоединять?

Вы можете извлечь старую партицию из рабочей таблицы, не удаляя данные. Распространённые варианты использования:

  • Архивирование в отдельной базе данных
  • Перемещение на более дешёвое хранилище
  • Схема «сначала резервная копия, затем удаление»

DETACH ПАРТИЦИЯ

Удаляет партицию из родительской таблицы, но сохраняет данные:

ALTER TABLE events DETACH PARTITION events_2022;
-- events_2022 is now a standalone table.
-- Queries on events no longer see those rows.

DETACH CONCURRENTLY (PG 14+)

Избегает блокировки ACCESS EXCLUSIVE:

ALTER TABLE events DETACH PARTITION events_2022 CONCURRENTLY;
-- Two-step: detach pending, then finalize. App writes continue.

Архивирование отсоединённых партиций

После отсоединения:

-- Backup with pg_dump:
pg_dump --table=events_2022 mydb > events_2022.sql

-- Move to a cold-storage Postgres or S3:
psql cold_db < events_2022.sql

-- Then drop from primary:
DROP TABLE events_2022;

ATTACH ПАРТИЦИЯ

Добавляет существующую таблицу как новую партицию:

CREATE TABLE events_2025 (LIKE events INCLUDING ALL);
-- Load data with COPY or INSERT ... SELECT

ALTER TABLE events ATTACH PARTITION events_2025
  FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');

Проверка во время ATTACH

ATTACH сканирует новую партицию, чтобы убедиться, что каждая строка соответствует границам FOR VALUES. Чтобы избежать сканирования, заранее добавьте подходящее ограничение CHECK:

ALTER TABLE events_2025
  ADD CONSTRAINT events_2025_ts_check
  CHECK (ts >= '2025-01-01' AND ts < '2026-01-01');

ALTER TABLE events ATTACH PARTITION events_2025
  FOR VALUES FROM ('2025-01-01') TO ('2026-01-01');
-- No scan needed; PG trusts the CHECK.

Плавающие временные окна

Еженедельно или ежемесячно сдвигайте окно вперёд: заранее создайте следующую партицию и удалите самую старую:

BEGIN;
  CREATE TABLE events_2024_q4 PARTITION OF events FOR VALUES FROM ('2024-10-01') TO ('2025-01-01');
  DROP TABLE events_2023_q4;
COMMIT;

Переключение уровней хранения

Отсоедините партицию, выполните ALTER TABLE … SET TABLESPACE для перемещения на более медленное хранилище и снова присоедините её:

ALTER TABLE events DETACH PARTITION events_2022;
ALTER TABLE events_2022 SET TABLESPACE archive_disk;
ALTER TABLE events ATTACH PARTITION events_2022 FOR VALUES FROM ('2022-01-01') TO ('2023-01-01');

Индексы присоединённых партиций

Чтобы партицию можно было присоединить, её индексы должны соответствовать индексам родительской таблицы. В PG 14+ PG может автоматически создать отсутствующие индексы во время ATTACH.

Атомарная замена партиции

Оберните DETACH + ATTACH в транзакцию, чтобы атомарно заменить содержимое партиции. Распространённый вариант: «собрать новую партицию отдельно, а затем заменить старую»:

BEGIN;
  ALTER TABLE events DETACH PARTITION events_2024_q1;
  ALTER TABLE events ATTACH PARTITION events_2024_q1_new
    FOR VALUES FROM ...;
COMMIT;

Производительность

DETACH и ATTACH — это операции с каталогом, которые выполняются мгновенно, если ограничения заданы заранее. При большом масштабе приём с ограничением CHECK становится необходимым.

Итоги

Отсоединение и присоединение — секретное оружие секционирования для обслуживания без остановки.

  • DETACH ПАРТИЦИЯ CONCURRENTLY для удаления без остановки
  • Заранее заданное ограничение CHECK пропускает проверочное сканирование
  • Замена, архивирование и перенос между уровнями хранения
  • Атомарность с помощью BEGIN/COMMIT

Быстрая проверка

Как избежать полного сканирования таблицы при выполнении ATTACH ПАРТИЦИЯ?

Можно начать бесплатно

Изучай SQL с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
46
Уроки
183

Часто задаваемые вопросы

Урок «Отсоединение и присоединение секций» бесплатный?

Да — полный текст урока «Отсоединение и присоединение секций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс SQL Academy, подпишись на CoddyKit PRO. Курс SQL Academy содержит 4 уроков всего.

Чему я научусь в уроке «Отсоединение и присоединение секций»?

Используйте ATTACH PARTITION и DETACH PARTITION, чтобы добавлять и удалять секции без блокировки чтения Ты практикуешь SQL Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать SQL Academy?

Предыдущий опыт не требуется. SQL Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Отсоединение и присоединение секций»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке SQL Academy?

Да. Каждый урок SQL Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужно секционирование: отсечение и обслуживание
  2. Секционирование по диапазону, списку и хешу
  3. Отсоединение и присоединение секций
  4. Эффективные запросы к секционированным таблицам
← Назад к SQL Academy