PolarDB PostgreSQL版(兼容Oracle)提供系统视图,您可以使用系统视图来查看分区表的结构信息。
PolarDB PostgreSQL版(兼容Oracle)提供了以下几个系统视图和系统函数,供您查看数据库中分区表的相关信息。
pg_partitioned_table
返回字段说明
列名 | 描述 |
partrelid | 分区表pg_class项的OID。 |
partstrat | 分区策略。取值如下:
|
partnatts | 分区键中的列数。 |
partdefid | 分区表默认分区的pg_class项的OID。如果分区表没有默认分区,则为零。 |
partattrs | 长度为partnatts的数组,表示哪些表列是分区键的组成部分。 例如,值 |
partclass | 对于分区键中的每一列,包含要使用的操作符类的OID。 |
partcollation | 对于分区键中的每一列,包含用于分区的排序规则的OID。如果该列不是一种可排序数据类型,则为零。 |
partexprs | 非简单列引用的分区键列的表达式树( 这是一个列表,partattrs中每一个零项都有一个元素。如果所有分区键列都是简单列引用,则该值为空。 |
示例
SELECT * FROM pg_partitioned_table;
partrelid | partstrat | partnatts | partdefid | partattrs | partclass | partcollation | partexprs
-----------+-----------+-----------+-----------+-----------+-----------+---------------+-----------
17124 | h | 1 | 0 | 1 | 10028 | 0 |
(1 row)
pg_partition_tree
仅PolarDB PostgreSQL版Oracle语法兼容 2.0支持该系统视图。
该函数用于列出分区树中的表或索引的相关信息。其入参为表名,返回字段描述见下。
返回字段说明
列名 | 描述 |
relid | 分区名称。 |
parentrelid | 其直系父分区的名称。如果没有,则为空。 |
isleaf | 是否为叶子分区。 |
level | 在层次结构中的级别。level的值从 |
示例
SELECT * FROM pg_partition_tree('idxpart');
relid | parentrelid | isleaf | level
----------+-------------+--------+-------
idxpart | | f | 0
idxpart0 | idxpart | t | 1
idxpart1 | idxpart | t | 1
(3 rows)
pg_class
pg_class存放了PolarDB PostgreSQL版(兼容Oracle)中所有的表和索引的对象,其中有一部分信息和分区表有关,下面介绍和分区表有关的字段。
返回字段说明
列名 | 描述 |
relkind | 目标对象类型,取值如下:
|
relhassubclass | 是否有下级分区,有则为真(True),否则为假(False)。 |
relispartition | 如果表或索引是一个分区,则为真。 |
relpartbound | 如果表示一个分区(见relispartition),分区边界的内部表达。 |
示例
SELECT relkind , relhassubclass, relispartition, pg_catalog.pg_get_expr(relpartbound ,oid) AS relpartbound FROM pg_class WHERE relname = 'sales_q1_2012';
relkind | relhassubclass | relispartition | relpartbound | relpartname
---------+----------------+----------------+------------------------------------------------------+-------------
r | f | t | FOR VALUES FROM (MINVALUE) TO ('01-APR-12 00:00:00') | q1_2012
(1 row)
pg_inherits
pg_inherits记录有关表继承层次的信息。数据库中每个直接父子关系都包含在此系统视图中。
返回字段说明
列名 | 描述 |
inhrelid | 分区的OID。 |
inhparent | 直系父分区的OID。 |
inhseqno | 分区表默认为1,否则为继承表。 |
inhdetachpending | true表示正在脱离进程中的分区,否则为false。 说明 仅PolarDB PostgreSQL版Oracle语法兼容 2.0支持该字段。 |
inhfinparent | 该分区最上层父表的OID。 说明 仅PolarDB PostgreSQL版Oracle语法兼容 2.0支持该字段。 |
partname | 该分区表在分区结构中的分区名。 说明 仅PolarDB PostgreSQL版Oracle语法兼容 2.0支持该字段。 |
示例
SELECT * FROM pg_inherits WHERE inhrelid = 19318;
inhrelid | inhparent | inhseqno | inhdetachpending | inhfinparent | partname
----------+-----------+----------+------------------+--------------+----------
19318 | 19192 | 1 | f | 0 |
(1 row)