华为云用户手册

  • txid_visible_in_snapshot(bigint, txid_snapshot) 描述:在快照中事务ID是否可见(不使用子事务ID)。 返回类型:boolean 内部事务ID类型(xid)是32位,每40亿事务一次循环。这些函数使用的数据类型txid_snapshot,存储在特定时刻事务ID可见性的信息。其组件描述在表1。 表1 快照组件 名字 描述 xmin 最早的事务ID(txid)仍然活动。所有较早事务将是已经提交可见的,或者是直接回滚。 xmax 作为尚未分配的txid。所有大于或等于此txids的都是尚未开始的快照时间,因此不可见。 xip_list 当前快照中活动的txids。这个列表只包含在xmin和xmax之间活动的txids;有可能活动的txids高于xmax。 介于大于等于xmin、小于xmax,并且不在这个列表中的txid,在这个时间快照已经完成的,因此按照提交状态查看他是可见还是回滚。这个列表不包含子事务的txids。 txid_snapshot的文本表示为:xmin:xmax:xip_list。 示例:10:20:10,14,15意思为:xmin=10, xmax=20, xip_list=10, 14, 15。
  • obj_description(object_oid, catalog_name) 描述:获取一个数据库对象的注释。 返回类型:text 备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名字声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。 obj_description不能用于表字段,因为字段没有自己的OID。
  • col_description(table_oid, column_number) 描述:获取一个表字段的注释。 返回类型:text 备注:col_description返回一个表中字段的注释,通过表OID和字段号来声明。 示例:查询pg_class系统表获取表OID,查询INFORMATION_SCHEMA.COLUMNS系统视图获取column_number。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 SELECT COLUMN_NAME,ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 't' AND COLUMN_NAME = 'a'; column_name | ordinal_position -------------+------------------ a | 1 (1 row) SELECT oid FROM pg_class WHERE relname='t'; oid ------- 44020 (1 row) SELECT col_description(44020,1); col_description ----------------------- This is a test table. (1 row)
  • pg_get_functiondef(func_oid) 描述:获取函数的定义。 返回类型:text func_oid为函数的OID,可以通过PG_PROC系统表查询。 示例:查询函数justify_days的OID及其函数定义。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 SELECT oid FROM pg_proc WHERE proname ='justify_days'; oid ------ 1295 (1 row) SELECT * FROM pg_get_functiondef(1295); headerlines | definition -------------+-------------------------------------------------------------- 4 | CREATE OR REPLACE FUNCTION pg_catalog.justify_days(interval)+ | RETURNS interval + | LANGUAGE internal + | IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE + | AS $function$interval_justify_days$function$ + | (1 row)
  • 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)
  • 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)
  • 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函数。
  • 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函数。
  • 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)
  • 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_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)
  • 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_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_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)
  • 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_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)
  • 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值。如果参数不是排序的类型,则抛出一个错误。
  • 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_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)
  • 模式可见性查询函数 每个函数对数据库对象执行可见性检查。对于函数和操作符,如果在前面的搜索路径中没有相同的对象名称和参数的数据类型,则此对象是可见的。对于操作符类,则要同时考虑名字和相关索引的访问方法。 所有这些函数都需要使用OID来标识要需要检查的对象。如果用户想通过名字测试对象,则可使用OID别名类型(regclass、regtype、regprocedure、regoperator、regconfig或regdictionary)。 比如,如果一个表所在的模式在搜索路径中,并且在前面的搜索路径中没有同名的表,那么这个表是可见的。它等效于表可以不带明确模式修饰进行引用。比如,要列出所有可见表的名字: 1 SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
  • has_foreign_data_wrapper_privilege(fdw, privilege) 描述:当前用户是否有访问外部数据封装器的权限。 参数:fdw表示外部数据封装器,可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是USAGE。 返回类型:boolean 备注:has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。
  • has_function_privilege(function, privilege) 描述:当前用户是否有访问函数的权限。 参数:function可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串必须是EXECUTE。 返回类型:boolean 备注:has_function_privilege检查当前用户是否能以指定方式访问指定函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时,允许输入的类型和regprocedure数据类型一样(请参考对象标识符类型)。访问权限类型必须是EXECUTE。
  • has_schema_privilege(schema, privilege) 描述:当前用户是否有访问模式的权限。 参数:schema可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值CREATE、USAGE,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_schema_privilege检查用户是否能以特定方式访问指定模式。其参数类似has_table_privilege。访问权限类型必须是CREATE或USAGE的一些组合。
  • pg_has_role(role, privilege) 描述:当前用户是否有角色的权限。 参数:role可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值MEMBER、USAGE,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:pg_has_role检查用户是否能以特定方式访问角色。其参数类似has_table_privilege,除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。
  • has_column_privilege(user, table, column, privilege) 描述:指定用户是否有访问列的权限。 参数:user可以通过名字(text类型)或OID来声明。table可以通过名字(text类型)或者OID来声明。column可以通过列名(text类型)或属性号(smallint类型)来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFEREN CES ,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean
  • has_column_privilege(table, column, privilege) 描述:当前用户是否有访问列的权限。 参数:table可以通过名字(text类型)或者OID来声明。column可以通过列名(text类型)或属性号(smallint类型)来声明。privilege使用文本字符串来声明,该文本字符串可取值SELECT、INSERT、UPDATE、REFERENCES,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege,可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。 拥有表的表级别权限则隐含的拥有该表每列的列级权限。
  • has_database_privilege(database, privilege) 描述:当前用户是否有访问数据库的权限。 参数:database可以通过名字(text类型)或者OID来声明。privilege使用文本字符串来声明,该文本字符串可取值CREATE、CONNECT、TEMPORARY或TEMP,也可以用逗号分隔列出的多个权限类型。 返回类型:boolean 备注:has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP(等价于TEMPORARY)的一些组合。
共100000条