PostgreSQL,获取所有分区表名和所有NOT partiotioned表名

时间:2018-01-22 13:20:50

标签: sql postgresql postgresql-9.6

如何获取数据库中所有非分区表的名称?我使用PostgresSQL 9.6

我如何才能获取分区表的名称?

现在我在我的数据库中有了部分名称,指定了一个表名,但是我需要做到这一点。

SELECT i.inhrelid::regclass AS child
FROM   pg_inherits i
WHERE  i.inhparent = 'public.documento'::regclass;

2 个答案:

答案 0 :(得分:0)

<强> upodated

用于分区表:

select distinct inhparent::regclass from pg_inherits

而不是分区smthlike:

select oid::regclass::text relation
from pg_class where relkind = 'r'
except
select distinct inhparent::regclass::text
from pg_inherits
except
select distinct inhrelid::regclass::text
from pg_inherits
;

注意:要过滤结果,只需使用where,例如

with l as (
<code above>
)
select * from l where relation not like 'pg_%';

答案 1 :(得分:0)

pg_inherits记录有关表和索引继承层次结构的信息。 如果只需要获取所有分区表(不包括分区索引),则可以使用:

select relnamespace::regnamespace::text schema_name, oid::regclass::text table_name from pg_class
where relkind = 'p' and oid in (select distinct inhparent from pg_inherits)
order by schema_name, table_name;