0Pricing
SQL Academy · レッスン

パーティションの切り離しと接続

ATTACH PARTITIONとDETACH PARTITIONを使い、読み取りをブロックせずにパーティションを追加・切り離します。

「パーティションの切り離しと接続」はCoddyKit上の無料SQL Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSQL Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 SQL Academyコースには全4レッスンが含まれています。

なぜデタッチするのか

古いパーティションをデータを削除せずに稼働中のテーブルから切り離せます。一般的な用途は次のとおりです。

  • 別のデータベースへのアーカイブ
  • 低コストのストレージへの移動
  • バックアップ後に削除するパターン

DETACH PARTITION

データを保持したまま、親テーブルからパーティションを削除します。

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 PARTITION

既存のテーブルを新しいパーティションとして追加します。

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 以降では、ATTACH 中に不足しているインデックスを PG が自動作成できます。

パーティションのアトミックな入れ替え

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 PARTITION CONCURRENTLY
  • アタッチ前の CHECK 制約で検証スキャンを省略
  • 入れ替え、アーカイブ、ストレージ階層の移動
  • BEGIN/COMMIT でアトミックに実行

クイックチェック

ATTACH PARTITION の実行時に、テーブル全体のスキャンを回避するにはどうしますか?

よくある質問

「パーティションの切り離しと接続」レッスンは無料ですか?

はい。「パーティションの切り離しと接続」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、SQL Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 SQL Academyコースには全4レッスンが含まれています。

「パーティションの切り離しと接続」で何を学びますか?

ATTACH PARTITIONとDETACH PARTITIONを使い、読み取りをブロックせずにパーティションを追加・切り離します。 ブラウザで直接実行するハンズオンコードでSQL Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

SQL Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSQL Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。

「パーティションの切り離しと接続」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSQL Academyレッスンでコードを書いて実行できますか?

はい。すべてのSQL Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. パーティショニングの理由:プルーニングとメンテナンス
  2. 範囲、リスト、ハッシュパーティショニング
  3. パーティションの切り離しと接続
  4. パーティション横断クエリの効率化
← SQL Academyに戻る