Sha*_*hay 3 sql postgresql inheritance database-partitioning
获取数据库中创建的分区数量的最有效方法是什么?我正在使用*postgresq*l APi for c ++.
这是您可以选择表分区的所有名称的方法:
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)
传统的分区是通过继承来实现的。每个继承表在系统目录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 上的相关问题: