获取postgresql数据库中的分区数

Sha*_*hay 3 sql postgresql inheritance database-partitioning

获取数据库中创建的分区数量的最有效方法是什么?我正在使用*postgresq*l APi for c ++.

Fra*_*ens 9

这是您可以选择表分区的所有名称的方法:

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
Run Code Online (Sandbox Code Playgroud)

它也可用于计算:

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;
Run Code Online (Sandbox Code Playgroud)


Erw*_*ter 8

传统的分区是通过继承来实现的。每个继承表在系统目录pg_inherits中都有一个条目。给定父表的分区数量可以简单地通过以下方式计算:

SELECT count(*) AS partitions
FROM   pg_catalog.pg_inherits
WHERE  inhparent = 'schema.parent_tbl'::regclass;
Run Code Online (Sandbox Code Playgroud)

该解决方案也适用于Postgres 10 或更高版本中的声明式分区,因为引用手册:

各个分区通过后台继承链接到分区表;

dba.SE 上的相关问题: