パーティションテーブルから指定されたパーティションとそのすべてのデータを削除します。この操作は元に戻せません。このコマンドを実行する前に、ターゲットパーティションが不要になったこと、またはバックアップされていることを確認してください。
構文
ALTER TABLE [schema.]table_name DROP PARTITION partition_name;パラメーター
パラメーター | 必須 | 説明 | 例 |
| はい | パーティションを削除するターゲットパーティションテーブルの名前。 |
|
| はい | 削除するパーティションの名前。 |
|
注意
このコマンドを実行するには、テーブルのオーナーまたは権限を持つユーザーである必要があります。
パーティションテーブルには少なくとも 1 つのパーティションが必要なため、テーブルの最後のパーティションを削除することはできません。
DROP PARTITION文は、テーブルレベルの排他ロックAccessExclusiveLockを取得します。このロックは、テーブルに対するすべてのデータ操作言語 (DML) およびほとんどのデータ定義言語 (DDL) 操作をブロックします。この文はオフピーク時に実行し、テーブルに対する他の重大な操作をブロックしないように、完了までに十分な時間を確保してください。
例
よくある質問
Q1: コマンドを実行した後に partition "..." of relation "..." does not exist エラーが表示されるのはなぜですか?
パーティション名が存在しないか、大文字と小文字が一致していません。パーティション名では大文字と小文字が区別されます。正確なパーティション名を確認するには USER_TAB_PARTITIONS ビューをクエリするか、完全に一致させるために二重引用符 ("") を使用します。
Q2: permission denied for table ... または must be owner of table ... エラーが表示されるのはなぜですか?
現在のユーザーには十分な権限がありません。テーブルのオーナーまたは権限を持つユーザーに切り替えてコマンドを実行してください。
Q3: cannot drop partition due to dependent objects エラーが表示されるのはなぜですか?
外部キー制約やビューなど、他のデータベースオブジェクトがこのパーティションに依存しています。デフォルトの RESTRICT 動作では、削除ができません。まず、これらの依存オブジェクトを特定して削除する必要があります。
Q4: 操作に時間がかかったり、スタックしているように見えたりするのはなぜですか?
DROP PARTITION 文は AccessExclusiveLock を取得します。このロックが別のアクティブな長時間トランザクションによってブロックされている場合、操作は待機する必要があり、遅延やタイムアウトが発生する可能性があります。ブロッキングセッションは、アクティブなロックを確認することで特定できます。次に、そのクエリの (blocking_pid) を使用して、次の文でセッションに関する詳細を検索します。
-- PID に基づいてブロッキングスレッドのユーザー情報をクエリします。
SELECT
pid,
usename AS username, -- データベースのユーザー名
application_name, -- アプリケーション名 (JDBC、psql など)
client_addr, -- クライアント IP アドレス
client_hostname, -- クライアントのホスト名
client_port, -- クライアントポート
backend_start, -- 接続が開始された時間
xact_start, -- トランザクションが開始された時間
query_start, -- 現在のクエリが開始された時間
state_change, -- ステータスが最後に変更された時間
state, -- ステータス (アクティブ、アイドル、トランザクション中のアイドル)
wait_event_type, -- 待機イベントタイプ (Lock、IO など)
wait_event, -- 特定の待機イベント
query -- 現在実行中または最後に実行された SQL 文
FROM
pg_stat_activity
WHERE
pid in 'blocking_pid'; 関連する SQL
ALTER TABLE ADD PARTITION: パーティションテーブルに新しいパーティションを追加します。
ALTER TABLE TRUNCATE PARTITION: パーティション定義を維持したまま、パーティションからすべてのデータをクリアします。
ALTER TABLE SPLIT PARTITION: 1 つのパーティションを 2 つのパーティションに分割します。