更新时间:2024-11-27 GMT+08:00

系统表信息函数

format_type(type_oid, typemod)

描述:获取数据类型的SQL名称。

返回类型:text

备注:

format_type通过数据类型的类型OID以及可能的类型修饰词,返回其SQL名称。如果不知道具体的修饰词,则在类型修饰词的位置传入NULL。类型修饰词一般只对有长度限制的数据类型有意义。format_type所返回的SQL名称中包含数据类型的长度值,其大小是:实际存储长度len - sizeof(int32),单位字节。数据存储时需要32位的空间来存储用户对数据类型的自定义长度信息,即实际存储长度要比用户定义长度多4个字节。在下例中,format_type返回的SQL名称为“character varying(6)”,6表示varchar类型的长度值是6字节,因此该类型的实际存储长度为10字节。

1
2
3
4
5
SELECT format_type((SELECT oid FROM pg_type WHERE typname='varchar'), 10);
     format_type      
----------------------
 character varying(6)
(1 row)

pg_check_authid(role_oid)

描述:检查是否存在给定oid的角色名。

返回类型:bool

pg_describe_object(catalog_id, object_id, object_sub_id)

描述:获取数据库对象的描述。

返回类型:text

备注:pg_describe_object返回由目录OID,对象OID和一个(或许0个)子对象ID指定的数据库对象的描述。这有助于确认存储在pg_depend系统表中对象的身份。

pg_get_constraintdef(constraint_oid)

描述:获取约束的定义。

返回类型:text

pg_get_constraintdef(constraint_oid, pretty_bool)

描述:获取约束的定义。

返回类型:text

备注:pg_get_constraintdef和pg_get_indexdef分别从约束或索引上使用创建命令进行重构。

pg_get_expr(pg_node_tree, relation_oid)

描述:反编译表达式的内部形式,假设其中的任何Vars都引用第二个参数指定的关系。

返回类型:text

pg_get_expr(pg_node_tree, relation_oid, pretty_bool)

描述:反编译表达式的内部形式,假设其中的任何Vars都引用第二个参数指定的关系。

返回类型:text

备注:pg_get_expr反编译一个独立表达式的内部形式,比如一个字段的缺省值。在检查系统表的内容的时候很有用。如果表达式可能包含关键字,则指定它们引用相关的OID作为第二个参数;如果没有关键字,设置为零即可。

pg_get_indexdef(index_oid)

描述:获取索引的CREATE INDEX命令。

返回类型:text

index_oid为索引的OID,可以通过PG_STATIO_ALL_INDEXES系统视图查询。

示例:查询索引ds_ship_mode_t1_index1的OID及其创建命令。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT indexrelid FROM PG_STATIO_ALL_INDEXES WHERE indexrelname = 'ds_ship_mode_t1_index1';
 indexrelid
------------
     136035
(1 row)
SELECT * FROM pg_get_indexdef(136035);
                                                pg_get_indexdef
---------------------------------------------------------------------------------------------------------------
 CREATE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1 USING psort (sm_ship_mode_sk) TABLESPACE pg_default
(1 row)

pg_get_indexdef(index_oid, column_no, pretty_bool)

描述:获取索引的CREATE INDEX命令,或者如果column_no不为零,则只获取一个索引字段的定义。

返回类型:text

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
SELECT * FROM pg_get_indexdef(136035,0,false);
                                                pg_get_indexdef
---------------------------------------------------------------------------------------------------------------
 CREATE INDEX ds_ship_mode_t1_index1 ON tpcds.ship_mode_t1 USING psort (sm_ship_mode_sk) TABLESPACE pg_default
(1 row)
SELECT * FROM pg_get_indexdef(136035,1,false);
 pg_get_indexdef
-----------------
 sm_ship_mode_sk
(1 row)

pg_get_keywords()

描述:获取SQL关键字和类别列表。

返回类型:setof record

备注:pg_get_keywords返回一组关于描述服务器识别SQL关键字的记录。word列包含关键字。catcode列包含一个分类代码:U表示通用的,C表示列名,T表示类型或函数名,或R表示保留。catdesc列包含了一个可能本地化描述分类的字符串。

pg_get_ruledef(rule_oid)

描述:获取规则的CREATE RULE命令。

返回类型:text

pg_get_ruledef(rule_oid, pretty_bool)

描述:获取规则的CREATE RULE命令。

返回类型:text

pg_get_userbyid(role_oid)

描述:获取给定OID的角色名。

返回类型:name

备注:pg_get_userbyid通过角色的OID抽取对应的用户名。

pg_get_viewdef(viewname text [, pretty bool [, fullflag bool]])

描述:为视图获取底层的SELECT命令。

返回类型:text

备注:

  • pg_get_viewdef重构定义视图的SELECT查询。pretty bool参数为true时,显示格式“适合打印”,且该格式易读。pretty bool参数缺省值为false,显示格式不易读。如果用于转储,那么尽可能使用缺省格式。pretty bool参数只对有效视图生效。
  • fullflag bool参数为true时,显示视图的完整定义。其缺省值为false。

pg_get_viewdef(viewoid oid [, pretty bool [, fullflag bool]])

描述:为视图获取底层的SELECT命令。

返回类型:text

pg_get_viewdef(view_oid, wrap_column_int)

描述:为视图获取底层的SELECT命令;行字段被换到指定的列数,打印是隐含的。

返回类型:text

pg_get_tabledef(table_oid)

描述:根据table_oid获取表定义。

返回类型:text

示例:先通过系统表pg_class获取表customer_t2的OID,再使用此函数查询表customer_t2的定义,可获取创建表customer_t2时的表字段,表的存储方式(行存或列存)及表的分布方式等信息。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
SELECT oid FROM pg_class WHERE relname ='customer_t2';
  oid
-------
 17353
(1 row)

SELECT * FROM pg_get_tabledef(17353);
              pg_get_tabledef
--------------------------------------------
 SET search_path = dbadmin;                +
 CREATE  TABLE customer_t2 (               +
         state_id character(2),            +
         state_name character varying(40), +
         area_id numeric                   +
 )                                         +
 WITH (orientation=column, compression=low)+
 DISTRIBUTE BY HASH(state_id)              +
 TO GROUP group_version1;
(1 row)

pg_get_tabledef(table_name)

描述:根据table_name获取表定义。

返回类型:text

备注:pg_get_tabledef重构出表定义的CREATE语句,包含了表定义本身、索引信息、comments信息。对于表对象依赖的group、schema、tablespace、server等信息,需要用户自己去创建,表定义里不会有这些对象的创建语句。

pg_options_to_table(reloptions)

描述:获取存储选项名称/值对的集合。

返回类型:setof record

备注:pg_options_to_table当通过pg_class.reloptions或pg_attribute.attoptions时返回存储选项名字/值对(option_name/option_value)的集合。

示例:

1
2
3
4
5
6
7
CREATE TABLE customer_test
(
  state_ID   CHAR(2),
  state_NAME VARCHAR2(40),
  area_ID    NUMBER
)
WITH (ORIENTATION = COLUMN,COMPRESSION=middle);
1
2
3
4
5
6
7
8
9
SELECT pg_options_to_table(reloptions) FROM pg_class WHERE relname='customer_test';
pg_options_to_table
----------------------
 (orientation,column)
 (compression,middle)
 (bucketnums,16384)
 (colversion,2.0)
 (enable_delta,false)
(5 rows)

pg_typeof(any)

描述:获取任何值的数据类型。

返回类型:regtype

备注:

pg_typeof返回传递给他的值的数据类型OID。这可能有助于故障排除或动态构造SQL查询。声明此函数返回regtype,这是一个OID别名类型(请参考对象标识符类型);这意味着它是一个为了比较而显示类型名字的OID。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
SELECT pg_typeof(33);
 pg_typeof 
-----------
 integer
(1 row)

SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
 typlen 
--------
      4
(1 row)

collation for (any)

描述:获取参数的排序。

返回类型:text

备注:

表达式collation for返回传递给他的值的排序。示例:

1
2
3
4
5
SELECT collation for (description) FROM pg_description LIMIT 1;
 pg_collation_for 
------------------
 "default"
(1 row)

值可能是引号括起来的并且模式限制的。如果没有为参数表达式排序,则返回一个null值。如果参数不是排序的类型,则抛出一个错误。

getdistributekey(table_name)

描述:获取一个hash表的分布列。

返回类型:text

示例:

1
2
3
4
5
SELECT getdistributekey('item');
 getdistributekey 
------------------
 i_item_sk
(1 row)

table_skewness(text)

描述:查看表数据在所有节点的占比。

参数:表示待查询表的表名,为text类型。

返回值类型:record

table_skewness(table_name text, column_name text[, row_num text])

描述:查看表里某列数据,按hash分布规则,在各节点的占比情况。结果以数据节点上的数据量排序。

参数:table_name为表名;column_name为列名;row_num表示查看当前列所有数据,可缺省,默认为0。非0时,表示抽取指定条数的数据查看占比情况(每次采样结果可能不相同,只保证采集row_num条数据进行占比计算)。

返回值类型:record

示例:

根据tx表中的a列,按hash分布,则在1,2,0编号的DN上分布的数据量分别为7条,2条,1条。

1
2
3
4
5
6
7
SELECT * FROM table_skewness('tx','a');
 seqnum | num |  ratio
--------+-----+----------
 1      | 7   | 70.000%
 2      | 2   | 20.000%
 0      | 1   | 10.000%
(3 row)

table_data_skewness(data_row record, locatorType "char")

描述:计算指定表中列拼接出的record,对应的桶分布索引。

参数:data_row表示指定表中列拼接出的record,locatorType表示分布规则,当前建议指定'H',按hash分布计算。

返回值类型:smallint

示例:

计算tx表中a列拼接的record,按照hash分布规则对应的桶分布索引。

1
2
3
4
5
6
7
8
9
SELECT a, table_data_skewness(row(a), 'H') FROM tx;
 a | table_data_skewness 
---+---------------------
 3 |                   0
 6 |                   2
 7 |                   2
 4 |                   1
 5 |                   1
(5 rows)

table_distribution(schemaname text, tablename text)

描述:查看指定表在各个节点上占用的存储空间。

参数:表示待查询表的模式名和表名,均为text类型。

返回值类型:record

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。
  • 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。

table_distribution(regclass)

描述:查看指定表在各个节点上占用的存储空间。

参数:表示待查询表的表名或OID,表名可以有模式名限定。为regclass类型。

返回值类型:record

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • table_distribution性能比table_skewness更优,尤其是在大集群大数据量场景下,请优先考虑使用table_distribution函数。
  • 当使用table_distribution并希望直观的看到空间占比时,可使用dnsize/(sum(dnsize) over ())的方式查看出具体的占比情况。

table_distribution()

描述:查看当前库中所有表在各节点的存储空间分布情况。

返回值类型:record

  • 使用本函数涉及全库表信息查询,需要具备管理员权限或预置角色gs_role_read_all_stats权限。

当前基于table_distribution()函数,GaussDB(DWS)提供视图PGXC_GET_TABLE_SKEWNESS进行数据倾斜查询,建议在数据库中表数量(小于10000)较少的场景直接使用。

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
SELECT * FROM table_distribution();
     schemaname     |        tablename        |   nodename   | dnsize
--------------------+-------------------------+--------------+--------
 scheduler          | pg_task                 | dn_6005_6006 |   8192
 public             | ocr_group               | dn_6005_6006 |   8192
 public             | ocr_item                | dn_6005_6006 |   8192
 sea                | ocr_group               | dn_6005_6006 |  16384
 sea                | ocr_item                | dn_6005_6006 |  16384
 public             | customer_t1             | dn_6005_6006 |  16384
 dbms_om            | gs_wlm_session_info     | dn_6005_6006 |   8192
 dbms_om            | gs_wlm_operator_info    | dn_6005_6006 |   8192
 dbms_om            | gs_wlm_ec_operator_info | dn_6005_6006 |   8192
 public             | pgxc_copy_error_log     | dn_6005_6006 |   8192
 information_schema | sql_features            | dn_6005_6006 |  98304
 information_schema | sql_implementation_info | dn_6005_6006 |  49152
 information_schema | sql_languages           | dn_6005_6006 |  49152
 information_schema | sql_packages            | dn_6005_6006 |  49152
 information_schema | sql_parts               | dn_6005_6006 |  49152
 information_schema | sql_sizing              | dn_6005_6006 |  49152
 information_schema | sql_sizing_profiles     | dn_6005_6006 |   8192
 scheduler          | pg_task                 | dn_6003_6004 |   8192
 public             | ocr_group               | dn_6003_6004 |   8192
 public             | ocr_item                | dn_6003_6004 |  16384
 sea                | ocr_group               | dn_6003_6004 |   8192
 sea                | ocr_item                | dn_6003_6004 |  16384
 public             | customer_t1             | dn_6003_6004 |  16384
 dbms_om            | gs_wlm_session_info     | dn_6003_6004 |   8192
 dbms_om            | gs_wlm_operator_info    | dn_6003_6004 |   8192
 dbms_om            | gs_wlm_ec_operator_info | dn_6003_6004 |   8192
 public             | pgxc_copy_error_log     | dn_6003_6004 |   8192
 information_schema | sql_features            | dn_6003_6004 |  98304
 information_schema | sql_implementation_info | dn_6003_6004 |  49152
 information_schema | sql_languages           | dn_6003_6004 |  49152
 information_schema | sql_packages            | dn_6003_6004 |  49152
 information_schema | sql_parts               | dn_6003_6004 |  49152
 information_schema | sql_sizing              | dn_6003_6004 |  49152
 information_schema | sql_sizing_profiles     | dn_6003_6004 |   8192
 scheduler          | pg_task                 | dn_6001_6002 |   8192
 public             | ocr_group               | dn_6001_6002 |  16384
 public             | ocr_item                | dn_6001_6002 |   8192
 sea                | ocr_group               | dn_6001_6002 |   8192
 sea                | ocr_item                | dn_6001_6002 |  16384
 public             | customer_t1             | dn_6001_6002 |  16384
 dbms_om            | gs_wlm_session_info     | dn_6001_6002 |   8192
 dbms_om            | gs_wlm_operator_info    | dn_6001_6002 |   8192
 dbms_om            | gs_wlm_ec_operator_info | dn_6001_6002 |   8192
 public             | pgxc_copy_error_log     | dn_6001_6002 |   8192
 information_schema | sql_features            | dn_6001_6002 |  98304
 information_schema | sql_implementation_info | dn_6001_6002 |  49152
 information_schema | sql_languages           | dn_6001_6002 |  49152
 information_schema | sql_packages            | dn_6001_6002 |  49152
 information_schema | sql_parts               | dn_6001_6002 |  49152
 information_schema | sql_sizing              | dn_6001_6002 |  49152
 information_schema | sql_sizing_profiles     | dn_6001_6002 |   8192
(51 rows)

gs_table_distribution(schemaname text, tablename text)

描述:快速查看指定表在各个节点上占用的存储空间。

返回值类型:record

表1 gs_table_distribution(schemaname text, tablename text)

名称

类型

描述

schemaname

name

模式名称。

tablename

name

表名。

relkind

character

类型。

  • i: 索引
  • r: 表

nodename

name

节点名称。

dnsize

bigint

表在该节点上的存储空间大小,单位:字节。

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • 该函数基于PG_RELFILENODE_SIZE系统表上的物理文件存储空间记录,需确保GUC参数use_workload_manager和enable_perm_space必须开启。
  • 性能上,单表查询时,gs_table_distribution函数低于table_distribution函数;在全库表查询时,gs_table_distribution函数大幅度优于table_distribution函数;在大集群大数据量场景下,如果进行全库表表查询,建议优先使用gs_table_distribution函数。

gs_table_distribution()

描述:快速查看当前库中所有表在各节点的存储空间分布情况。

返回值类型:record

表2 gs_table_distribution()

名称

类型

描述

schemaname

name

模式名称。

tablename

name

表名。

relkind

character

类型,i: 索引,r: 表。

nodename

name

节点名称。

dnsize

bigint

表在该节点上的存储空间大小,单位:字节。

  • 使用本函数查询指定表存储分布信息,需要具备指定表的SELECT权限。
  • 该函数基于PG_RELFILENODE_SIZE系统表上的物理文件存储空间记录,需确保GUC参数use_workload_manager和enable_perm_space必须开启。
  • 性能上,单表查询时,gs_table_distribution函数低于table_distribution函数;在全库表查询时,gs_table_distribution函数大幅度优于table_distribution函数;在大集群大数据量场景下,如果进行全库表表查询,建议优先使用gs_table_distribution函数。

pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples)

描述:获取各表的插入、更新、删除以及脏页率信息。该函数针对视图PGXC_GET_STAT_ALL_TABLES进行了性能优化,可以快速筛选出每个DN上满足脏页率大于dirty_percent,dead元组数大于n_tuples的表,将筛选结果返回到CN进行汇总并输出。

返回值类型:setof record

函数返回字段如下:

名称

类型

描述

relid

oid

表的OID

relname

name

表名

schemaname

name

表的模式名

n_tup_ins

bigint

插入的元组条数

n_tup_upd

bigint

更新的元组条数

n_tup_del

bigint

删除的元组条数

n_live_tup

bigint

live元组的条数

n_dead_tup

bigint

dead元组的条数

dirty_page_rate

numeric(5,2)

表的脏页率信息(%)

示例:

查询数据库内脏页率大于10%,脏数据行数大于1000行的表:

1
2
3
4
5
6
SELECT * FROM pgxc_get_stat_dirty_tables(0,0) where dirty_page_rate > 10 and n_dead_tup > 1000;
 relid |         relname         | schemaname | n_tup_ins | n_tup_upd | n_tup_del | n_live_tup | n_dead_tup | dirty_page_rate
-------+-------------------------+------------+-----------+-----------+-----------+------------+------------+-----------------
 16782 | bandwidth_history_table | scheduler  |    356355 |         0 |    202068 |     154287 |      29031 |           15.84
 12050 | gs_wlm_instance_history | pg_catalog |    406464 |         0 |    234835 |     171647 |      27721 |           13.90
(2 rows)

pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples, text schema)

描述:获取各表的插入、更新、删除以及脏页率信息。该函数针对视图PGXC_GET_STAT_ALL_TABLES进行了性能优化, 可以快速筛选出每个DN上满足脏页率大于dirty_percent,dead元组数大于n_tuples的表,将筛选结果返回到CN进行汇总并输出。模式名是schema的表。

返回值类型:setof record

函数返回字段同上述函数pgxc_get_stat_dirty_tables(int dirty_percent, int n_tuples)。

示例:

查询指定系统表pg_catalog.pg_class的脏页率:

1
2
3
4
5
SELECT relname AS table_name,dirty_page_rate FROM pgxc_get_stat_dirty_tables(0,0,'pg_catalog') WHERE relname = 'pg_class';
 table_name | dirty_page_rate
------------+-----------------
 pg_class   |           16.46
(1 row)

gs_switch_relfilenode()

描述:交换两个表或分区的元信息(重分布工具内部使用,用户直接使用会有错误信息提示)。

返回值类型:integer

copy_error_log_create()

描述:创建COPY FROM容错机制所需要的错误表(public.pgxc_copy_error_log)。

返回值类型:boolean

  • 此函数会尝试创建public.pgxc_copy_error_log表,表的详细信息请参见表3
  • 在relname列上创建B-tree索引,并REVOKE ALL on public.pgxc_copy_error_log FROM public对错误表进行权限控制(与COPY语句权限一致)。
  • 由于尝试创建的public.pgxc_copy_error_log定义是一张行存表,因此集群上必须支持行存表的创建才能够正常运行此函数,并使用后续的COPY容错功能。需要特别注意的是,enable_hadoop_env这个GUC参数开启后会禁止在集群内创建行存表(GaussDB(DWS)默认为off)。
  • 此函数自身权限为Sysadmin及以上(与错误表、COPY权限一致)。
  • 若创建前public.pgxc_copy_error_log表已存在或者copy_error_log_relname_idx索引已存在,则此函数会报错回滚。
表3 错误表public.pgxc_copy_error_log信息

列名称

类型

描述

relname

varchar

表名称。以模式名.表名形式显示。

begintime

timestamp with time zone

出现数据格式错误的时间。

filename

character varying

出现数据格式错误的数据源文件名。

rownum

bigint

在数据源文件中,出现数据格式错误的行号。

rawrecord

text

在数据源文件中,出现数据格式错误的原始记录。为了防止字段长度过大,限制字段的长度不超过1024 byte。

detail

text

详细错误信息。

示例:

1
2
3
4
5
SELECT copy_error_log_create();
 copy_error_log_create
-----------------------
 t
(1 row)