Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取PostgreSQL数据库中的分区数_Sql_Postgresql_Inheritance_Database Partitioning - Fatal编程技术网

获取PostgreSQL数据库中的分区数

获取PostgreSQL数据库中的分区数,sql,postgresql,inheritance,database-partitioning,Sql,Postgresql,Inheritance,Database Partitioning,获取数据库中创建的分区数的最有效方法是什么 我使用C++的“强> PostgreSQL”/Stult> API。< /P> < P>这是您可以选择表分区的所有名称: SELECT nmsp_parent.nspname AS parent_schema, parent.relname AS parent, nmsp_child.nspname AS child, child.relname AS child_schema FROM pg_i

获取数据库中创建的分区数的最有效方法是什么


我使用C++的“强> PostgreSQL”/Stult> API。< /P> < P>这是您可以选择表分区的所有名称:

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
它也可用于计数:

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;

传统的分区是不可用的。每个继承表在系统目录中都有一个条目。给定父表的分区数可以简单地用以下公式计算:

SELECT count(*) AS partitions
FROM   pg_catalog.pg_inherits
WHERE  inhparent = 'schema.parent_tbl'::regclass;
该解决方案也适用于Postgres 10或更高版本,因为引用手册:

单个分区通过幕后继承链接到分区表

有关dba.SE的相关问题:


如何删除最旧的分区?(首先创建的分区?)如果最低的OID是最旧的分区,则可以使用MIN(child.OID)来查找此分区。您可以使用它查找此表的名称和架构,并使用它删除此表。存储过程使其更易于维护。