Search code examples
sqlpostgresqlinheritancedatabase-partitioning

Get number of partitions in PostgreSQL database


What is the most efficient way to get the number of partitions created in the database?

I am using PostgreSQL API for C++.


Solution

  • This is how you can select all the names of the table partitions:

    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
    

    It can be used to count as well:

    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;