Отсоединение и присоединение секций
Используйте ATTACH PARTITION и DETACH PARTITION, чтобы добавлять и удалять секции без блокировки чтения
«Отсоединение и присоединение секций» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Зачем нужно секционирование: отсечение и обслуживание
- Секционирование по диапазону, списку и хешу
- Отсоединение и присоединение секций
- Эффективные запросы к секционированным таблицам