2011-12-26 15 views

答えて

8

これは、あなたがテーブルのパーティションのすべての名前を選択することができる方法です。

SELECT 
    nmsp_parent.nspname  AS parent_schema, 
    parent.relname   AS parent, 
    COUNT(*) 
FROM pg_inherits 
    JOIN pg_class parent  ON pg_inherits.inhparent = parent.oid 
    JOIN pg_class child  ON pg_inherits.inhrelid = child.oid 
    JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace 
    JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace 
GROUP BY 
    parent_schema, 
    parent; 
+0

そして、最も古いパーティションを削除するにはどうすればよいですか? (最初に作成されたパーティション) – Shay

+0

最も小さいOIDが最も古いパーティションである場合、MIN(child.oid)を使用してこのパーティションを見つけることができます。これを使用して、このテーブルの名前とスキーマを検索し、このテーブルをDROPするために使用できます。ストアドプロシージャを使用すると、保守が簡単になります。 –

0

この質問は古いです:

SELECT 
    nmsp_parent.nspname AS parent_schema, 
    parent.relname  AS parent, 
    nmsp_child.nspname AS child, 
    child.relname  AS child_schema 
FROM pg_inherits 
    JOIN pg_class parent  ON pg_inherits.inhparent = parent.oid 
    JOIN pg_class child   ON pg_inherits.inhrelid = child.oid 
    JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace 
    JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace 

それだけでなく、カウントするために使用することができます。しかし、a new question on dba.SEはそれを参照しています。もっと簡単な解決方法を追加するよう迫っています。

質問によると、へ...

がデータベース内に作成したパーティションの数を取得する:inheritanceを使用して

と、特定の親テーブルのために、私が想定しています

SELECT count(*) AS partitions 
FROM pg_inherits i 
WHERE i.inhparent = 'my_schema.my_parent_tbl'::regclass; 

dba.SEに関する関連の回答の詳細:
Get all partition names for a table

関連する問題