Ruft alle Partitionsnamen für eine Tabelle ab


12

Ich möchte alle Partitionen auflisten, die durch dynamische Trigger in PostgreSQL 9.1 erstellt wurden.
Mit dieser Antwort von Frank Heikens konnte ich eine Anzahl von Partitionen generieren .

Ich habe eine Tabelle foomit einem Insert - Trigger, der erzeugt foo_1, foo_2usw. dynamisch. Die Partition zum Einfügen wird basierend auf der Primärschlüssel-ID ausgewählt, einer bereichsbasierten Partitionierung.

Ist es möglich, alle derzeit vorhandenen Partitionen für die Tabelle anzuzeigen foo?

Antworten:


19

Verwenden Sie die erste Abfrage aus der von Ihnen verknüpften Antwort und fügen Sie eine einfache WHEREKlausel hinzu, um die Partitionen einer einzelnen Tabelle abzurufen:

SELECT
    nmsp_parent.nspname AS parent_schema,
    parent.relname      AS parent,
    nmsp_child.nspname  AS child_schema,
    child.relname       AS child
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
WHERE parent.relname='parent_table_name';

6

Mit dem Objektkennungstyp regclasskann dies erheblich vereinfacht werden:

Liste alle untergeordneten Tabellen von parent_schema.foo:

SELECT i.inhrelid::regclass AS child -- optionally cast to text
FROM   pg_inherits i
WHERE  i.inhparent = 'my_schema.foo'::regclass;

Der Tabellenname, den Sie für die Umwandlung angeben, regclasskann optional schemaqualifiziert sein. Wenn nicht, search_pathentscheidet die Sichtbarkeit.

In ähnlicher Weise sind zurückgegebene Tabellennamen schemaqualifiziert und werden bei Bedarf automatisch maskiert.
Sehr sicher, schnell und bequem.

Übrigens, um die Quelltabelle pro Zeile für jede Zeile anzuzeigen, die aus einer beliebigen Tabelle abgerufen wurde:

SELECT tableoid::regclass AS source, *
FROM   my_schema.foo
WHERE <some_condition>;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.