分区表系统视图

PolarDB PostgreSQL版(兼容Oracle)提供系统视图,您可以使用系统视图来查看分区表的结构信息。

PolarDB PostgreSQL版(兼容Oracle)提供了以下几个系统视图和系统函数,供您查看数据库中分区表的相关信息。

pg_partitioned_table

返回字段说明

列名

描述

partrelid

分区表pg_class项的OID。

partstrat

分区策略。取值如下:

  • h:哈希分区表

  • l:列表分区表

  • r:范围分区表

partnatts

分区键中的列数。

partdefid

分区表默认分区的pg_class项的OID。如果分区表没有默认分区,则为零。

partattrs

长度为partnatts的数组,表示哪些表列是分区键的组成部分。

例如,值1 3表示第一个和第三个表列组成了分区键。这个数组中的零表示对应的分区键列是一个表达式而不是简单的列引用。

partclass

对于分区键中的每一列,包含要使用的操作符类的OID。

partcollation

对于分区键中的每一列,包含用于分区的排序规则的OID。如果该列不是一种可排序数据类型,则为零。

partexprs

非简单列引用的分区键列的表达式树(nodeToString()表达式)。

这是一个列表,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的值从0开始,表示输入表或索引作为分区树的根,1表示其分区,2表示其分区的分区,以此类推。

示例

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

目标对象类型,取值如下:

  • r:普通表。

  • i:索引。

  • S:序列。

  • t:TOAST表。

  • v:视图。

  • m:物化视图。

  • c:组合类型。

  • f:外部表。

  • p:分区表。

  • I:分区索引。

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)