更新时间:2024-03-06 GMT+08:00

系统信息函数

会话信息函数

  • current_catalog

    描述:当前数据库的名字(在标准SQL中称"catalog")。

    返回值类型:name

    示例:

    1
    2
    3
    4
    5
    SELECT current_catalog;
     current_database
    ------------------
     gaussdb
    (1 row)
    
  • current_database()

    描述:当前数据库的名字。

    返回值类型:name

    示例:

    1
    2
    3
    4
    5
    SELECT current_database();
     current_database
    ------------------
     gaussdb
    (1 row)
    
  • current_query()

    描述:由客户端提交的当前执行语句(可能包含多个声明)。

    返回值类型:text

    示例:

    1
    2
    3
    4
    5
    SELECT current_query();
          current_query
    -------------------------
     SELECT current_query();
    (1 row)
    
  • current_schema[()]

    描述:当前模式的名字。

    返回值类型:name

    示例:

    1
    2
    3
    4
    5
    SELECT current_schema();
     current_schema
    ----------------
     public
    (1 row)
    

    备注:current_schema返回在搜索路径中第一个顺位有效的模式名。(如果搜索路径为空则返回NULL,没有有效的模式名也返回NULL)。如果创建表或者其他命名对象时没有声明目标模式,则将使用这些对象的模式。

  • current_schemas(boolean)

    描述:搜索路径中的模式名字。

    返回值类型:name[]

    示例:

    1
    2
    3
    4
    5
    SELECT current_schemas(true);
       current_schemas
    ---------------------
     {pg_catalog,public}
    (1 row)
    

    备注:

    current_schemas(boolean)返回搜索路径中所有模式名字的数组。布尔选项决定像pg_catalog这样隐含包含的系统模式是否包含在返回的搜索路径中。

    搜索路径可以通过运行时设置更改。命令是:

    1
    SET search_path TO schema [, schema, ...]
    
  • current_user

    描述:当前执行环境下的用户名。

    返回值类型:name

    示例:

    1
    2
    3
    4
    5
    SELECT current_user;
     current_user
    --------------
     dbadmin
    (1 row)
    

    备注:current_user是用于权限检查的用户标识。通常,他表示会话用户,但是可以通过SET ROLE改变他。在函数执行的过程中随着属性SECURITY DEFINER的改变,其值也会改变。

  • inet_client_addr()

    描述:显示当前连接的客户端IP信息。

    • 此函数只有在远程连接模式下有效。
    • 如果是通过本地连接,使用此接口显示为空。

    返回值类型:inet

    示例:

    1
    2
    3
    4
    5
    SELECT inet_client_addr();
     inet_client_addr
    ------------------
     10.10.0.50
    (1 row)
    
  • inet_client_port()

    描述:显示当前连接的客户端的端口号。

    此函数只有在远程连接模式下有效。

    返回值类型:int

    示例:

    1
    2
    3
    4
    5
    SELECT inet_client_port();
     inet_client_port
    ------------------
                33143
    (1 row)
    
  • inet_server_addr()

    描述:显示当前服务器的IP信息。

    • 此函数只有在远程连接模式下有效。
    • 如果是通过本地连接,使用此接口显示为空。

    返回值类型:inet

    示例:

    1
    2
    3
    4
    5
    SELECT inet_server_addr();
     inet_server_addr
    ------------------
     10.10.0.13
    (1 row)
    
  • inet_server_port()

    描述:显示当前服务器的端口。如果是通过Unix-domain socket连接的,则所有这些函数都返回NULL。

    此函数只有在远程连接模式下有效。

    返回值类型:int

    示例:

    1
    2
    3
    4
    5
    SELECT inet_server_port();
     inet_server_port
    ------------------
     8000
    (1 row)
    
  • pg_backend_pid()

    描述:当前会话连接的服务进程的进程ID。

    返回值类型:int

    示例:

    1
    2
    3
    4
    5
    SELECT pg_backend_pid();
     pg_backend_pid
    -----------------
     140229352617744
    (1 row)
    
  • pg_conf_load_time()

    描述:配置加载时间。pg_conf_load_time返回最后加载服务器配置文件的时间戳。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    SELECT pg_conf_load_time();
          pg_conf_load_time       
    ------------------------------
     2017-09-01 16:05:23.89868+08
    (1 row)
    
  • pg_my_temp_schema()

    描述:会话的临时模式的OID,不存在则为0。

    返回值类型:oid

    示例:

    1
    2
    3
    4
    5
    SELECT pg_my_temp_schema();
     pg_my_temp_schema 
    -------------------
                     0
    (1 row)
    

    备注:pg_my_temp_schema返回当前会话中临时模式的OID,如果不存在(没有创建临时表)的话则返回0。如果给定的OID是其它会话中临时模式的OID,pg_is_other_temp_schema则返回true。

  • pg_is_other_temp_schema(oid)

    描述:是否为另一个会话的临时模式。

    返回值类型:boolean

    示例:

    1
    2
    3
    4
    5
    SELECT pg_is_other_temp_schema(25356);
     pg_is_other_temp_schema
    -------------------------
     f
    (1 row)
    
  • pg_listening_channels()

    描述:会话正在监听的信道名称。

    返回值类型:setof text

    示例:

    1
    2
    3
    4
    SELECT pg_listening_channels();
     pg_listening_channels
    -----------------------
    (0 rows)
    

    备注:pg_listening_channels返回当前会话正在监听的一组信道名称。

  • pg_postmaster_start_time()

    描述:服务器启动时间。pg_postmaster_start_time返回服务器启动时的timestamp with time zone。

    返回值类型:timestamp with time zone

    示例:

    1
    2
    3
    4
    5
    SELECT pg_postmaster_start_time();
       pg_postmaster_start_time   
    ------------------------------
     2017-08-30 16:02:54.99854+08
    (1 row)
    
  • pg_trigger_depth()

    描述:触发器的嵌套层次。

    返回值类型:int

    示例:

    1
    2
    3
    4
    5
    SELECT pg_trigger_depth();
     pg_trigger_depth 
    ------------------
                    0
    (1 row)
    
  • pgxc_version()

    描述:Postgres-XC版本信息。

    返回值类型:text

    示例:

    1
    2
    3
    4
    5
    SELECT pgxc_version();
                                                    pgxc_version                                                 
    -------------------------------------------------------------------------------------------------------------
     Postgres-XC 1.1 on x86_64-unknown-linux-gnu, based on PostgreSQL 9.2.4, compiled by g++ (GCC) 5.4.0, 64-bit
    (1 row)
    
  • session_user

    描述:会话用户名。

    返回值类型:name

    示例:

    1
    2
    3
    4
    5
    SELECT session_user;
     session_user
    --------------
     dbadmin
    (1 row)
    

    备注:session_user通常是连接当前数据库的初始用户,不过系统管理员可以用SET SESSION AUTHORIZATION修改这个设置。

  • user

    描述:等价于current_user。

    返回值类型:name

    示例:

    1
    2
    3
    4
    5
    SELECT user;
     current_user
    --------------
     dbadmin
    (1 row)
    
  • version()

    描述:版本信息。version返回一个描述服务器版本信息的字符串。

    返回值类型:text

    示例:

    1
    2
    3
    4
    5
    SELECT version();
                                                                    version                                                                
    ---------------------------------------------------------------------------------------------------------------------------------------
     PostgreSQL 9.2.4 gsql ((GaussDB 8.1.1 build af002019) compiled at 2020-01-10 05:43:20 commit 6995 last mr 11566 ) on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 5.4.0, 64-bit
    (1 row)
    

访问权限查询函数

  • has_any_column_privilege(user, table, privilege)

    描述:指定用户是否有访问表任何列的权限。

    返回类型:boolean

  • has_any_column_privilege(table, privilege)

    描述:当前用户是否有访问表任何列的权限。

    返回类型:boolean

    备注:has_any_column_privilege检查用户是否以特定方式访问表的任何列。其参数可能与has_table_privilege类似,除了访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。

    拥有表的表级别权限则隐含的拥有该表每列的列级权限,因此如果与has_table_privilege参数相同,has_any_column_privilege总是返回true。但是如果授予至少一列的列级权限也返回成功。

  • has_column_privilege(user, table, column, privilege)

    描述:指定用户是否有访问列的权限。

    返回类型:boolean

  • has_column_privilege(table, column, privilege)

    描述:当前用户是否有访问列的权限。

    返回类型:boolean

    备注:has_column_privilege检查用户是否以特定方式访问一列。其参数类似于has_table_privilege,可以通过列名或属性号添加列。想要的访问权限类型必须是SELECT、INSERT、UPDATE或REFERENCES的一些组合。

    拥有表的表级别权限则隐含的拥有该表每列的列级权限。

  • has_database_privilege(user, database, privilege)

    描述:指定用户是否有访问数据库的权限。

    返回类型:boolean

  • has_database_privilege(database, privilege)

    描述:当前用户是否有访问数据库的权限。

    返回类型:boolean

    备注:has_database_privilege检查用户是否能以在特定方式访问数据库。其参数类似has_table_privilege。访问权限类型必须是CREATE、CONNECT、TEMPORARY或TEMP(等价于TEMPORARY)的一些组合。

  • has_foreign_data_wrapper_privilege(user, fdw, privilege)

    描述:指定用户是否有访问外部数据封装器的权限。

    参数fdw,表示外部数据封装器,取值范围为外部数据封装器名字或ID。

    返回类型:boolean

  • has_foreign_data_wrapper_privilege(fdw, privilege)

    描述:当前用户是否有访问外部数据封装器的权限。

    返回类型:boolean

    备注:has_foreign_data_wrapper_privilege检查用户是否能以特定方式访问外部数据封装器。其参数类似has_table_privilege。访问权限类型必须是USAGE。

  • has_function_privilege(user, function, privilege)

    描述:指定用户是否有访问函数的权限。

    返回类型:boolean

  • has_function_privilege(function, privilege)

    描述:当前用户是否有访问函数的权限。

    返回类型:boolean

    备注:has_function_privilege检查一个用户是否能以指定方式访问一个函数。其参数类似has_table_privilege。使用文本字符而不是OID声明一个函数时,允许输入的类型和regprocedure数据类型一样(请参考对象标识符类型)。访问权限类型必须是EXECUTE。

  • has_language_privilege(user, language, privilege)

    描述:指定用户是否有访问语言的权限。

    返回类型:boolean

  • has_language_privilege(language, privilege)

    描述:当前用户是否有访问语言的权限。

    返回类型:boolean

    备注:has_language_privilege检查用户是否能以特定方式访问一个过程语言。其参数类似has_table_privilege。访问权限类型必须是USAGE。

  • has_schema_privilege(user, schema, privilege)

    描述:指定用户是否有访问模式的权限。

    返回类型:boolean

  • has_schema_privilege(schema, privilege)

    描述:当前用户是否有访问模式的权限。

    返回类型:boolean

    备注:has_schema_privilege检查用户是否能以特定方式访问一个模式。其参数类似has_table_privilege。访问权限类型必须是CREATE或USAGE的一些组合。

  • has_server_privilege(user, server, privilege)

    描述:指定用户是否有访问外部服务的权限。

    返回类型:boolean

  • has_server_privilege(server, privilege)

    描述:当前用户是否有访问外部服务的权限。

    返回类型:boolean

    备注:has_server_privilege检查用户是否能以指定方式访问一个外部服务器。其参数类似has_table_privilege。访问权限类型必须是USAGE。

  • has_table_privilege(user, table, privilege)

    描述:指定用户是否有访问表的权限。

    返回类型:boolean

  • has_table_privilege(table, privilege)

    描述:当前用户是否有访问表的权限。

    返回类型:boolean

    备注:has_table_privilege检查用户是否以特定方式访问表。用户可以通过名字或OID(pg_authid.oid)来指定,public表明PUBLIC伪角色,或如果缺省该参数,则使用current_user。该表可以通过名字或者OID声明。如果用名字声明,则在必要时可以用模式进行修饰。如果使用文本字符串来声明所希望的权限类型,这个文本字符串必须是SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES或TRIGGER之一的值。可以给权限类型添加WITH GRANT OPTION,用来测试权限是否拥有授权选项。也可以用逗号分隔列出的多个权限类型,如果拥有任何所列出的权限,则结果便为true。

    示例:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    SELECT has_table_privilege('tpcds.web_site', 'select');
     has_table_privilege  
    --------------------- 
     t 
    (1 row)
    
    SELECT has_table_privilege('dbadmin', 'tpcds.web_site', 'select,INSERT WITH GRANT OPTION ');
     has_table_privilege  
    --------------------- 
     t 
    (1 row) 
    
  • pg_has_role(user, role, privilege)

    描述:指定用户是否有角色的权限。

    返回类型:boolean

  • pg_has_role(role, privilege)

    描述:当前用户是否有角色的权限。

    返回类型:boolean

    备注:pg_has_role检查用户是否能以特定方式访问一个角色。其参数类似has_table_privilege,除了public不能用做用户名。访问权限类型必须是MEMBER或USAGE的一些组合。 MEMBER表示的是角色中的直接或间接成员关系(也就是SET ROLE的权限),而USAGE表示无需通过SET ROLE也直接拥有角色的使用权限。

模式可见性查询函数

每个函数执行检查数据库对象类型的可见性。对于函数和操作符,如果在前面的搜索路径中没有相同的对象名称和参数的数据类型,则此对象是可见的。对于操作符类,则要同时考虑名字和相关索引的访问方法。

所有这些函数都需要使用OID来标识要需要检查的对象。如果用户想通过名字测试对象,则使用OID别名类型(regclass、regtype、regprocedure、regoperator、regconfig或regdictionary)将会很方便。

比如,如果一个表所在的模式在搜索路径中,并且在前面的搜索路径中没有同名的表,则这个表是可见的。它等效于表可以不带明确模式修饰进行引用。比如,要列出所有可见表的名字:

1
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
  • pg_collation_is_visible(collation_oid)

    描述:该排序是否在搜索路径中可见。

    返回类型:boolean

  • pg_conversion_is_visible(conversion_oid)

    描述:该转换是否在搜索路径中可见。

    返回类型:boolean

  • pg_function_is_visible(function_oid)

    描述:该函数是否在搜索路径中可见。

    返回类型:boolean

  • pg_opclass_is_visible(opclass_oid)

    描述:该操作符类是否在搜索路径中可见。

    返回类型:boolean

  • pg_operator_is_visible(operator_oid)

    描述:该操作符是否在搜索路径中可见。

    返回类型:boolean

  • pg_opfamily_is_visible(opclass_oid)

    描述:该操作符族是否在搜索路径中可见。

    返回类型:boolean

  • pg_table_is_visible(table_oid)

    描述:该表是否在搜索路径中可见。

    返回类型:boolean

  • pg_ts_config_is_visible(config_oid)

    描述:该文本检索配置是否在搜索路径中可见。

    返回类型:boolean

  • pg_ts_dict_is_visible(dict_oid)

    描述:该文本检索词典是否在搜索路径中可见。

    返回类型:boolean

  • pg_ts_parser_is_visible(parser_oid)

    描述:该文本搜索解析是否在搜索路径中可见。

    返回类型:boolean

  • pg_ts_template_is_visible(template_oid)

    描述:该文本检索模板是否在搜索路径中可见。

    返回类型:boolean

  • pg_type_is_visible(type_oid)

    描述:该类型(或域)是否在搜索路径中可见。

    返回类型:boolean

系统表信息函数

  • 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_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)
    
  • pg_get_function_arguments(func_oid)

    描述:获取函数定义的参数列表(带默认值)。

    返回类型:text

    备注:pg_get_function_arguments返回一个函数的参数列表,需要在CREATE FUNCTION中使用这种格式。

  • pg_get_function_identity_arguments(func_oid)

    描述:获取参数列表来确定一个函数 (不带默认值)。

    返回类型:text

    备注:pg_get_function_identity_arguments返回需要的参数列表用来标识函数,这种形式需要在ALTER FUNCTION中使用,并且这种形式省略了默认值。

  • pg_get_function_result(func_oid)

    描述:获取函数的RETURNS子句。

    返回类型:text

    备注:pg_get_function_result为函数返回适当的RETURNS子句。

  • 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)的集合。

  • 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)
    

注释信息函数

  • col_description(table_oid, column_number)

    描述:获取一个表字段的注释。

    返回类型:text

    备注:col_description返回一个表中字段的注释,通过表OID和字段号来声明。

  • obj_description(object_oid, catalog_name)

    描述:获取一个数据库对象的注释。

    返回类型:text

    备注:带有两个参数的obj_description返回一个数据库对象的注释,该对象是通过其OID和其所属的系统表名字声明。比如,obj_description(123456,'pg_class')将返回OID为123456的表的注释。只带一个参数的obj_description只要求对象OID。

    obj_description不能用于表字段,因为字段没有自己的OID。

  • obj_description(object_oid)

    描述:获取一个数据库对象的注释。

    返回类型:text

  • shobj_description(object_oid, catalog_name)

    描述:获取一个共享数据库对象的注释。

    返回类型:text

    备注:shobj_description和obj_description差不多,不同之处仅在于前者用于共享对象。一些系统表是通用于集群中所有数据库的全局表,因此这些表的注释也是全局存储的。

事务ID和快照

以下的函数在一个输出形式中提供服务器事务信息。这些函数的主要用途是为了确定在两个快照之间有哪个事务提交。

  • pgxc_is_committed(transaction_id)

    描述:如果提交或忽略给定的XID(gxid)。NULL表示的状态是未知的(运行,准备,冻结等)。

    返回类型:bool

  • txid_current()

    描述:获取当前事务ID。

    返回类型:bigint

  • txid_current_snapshot()

    描述:获取当前快照。

    返回类型:txid_snapshot

  • txid_snapshot_xip(txid_snapshot)

    描述:在快照中获取正在进行的事务ID。

    返回类型:setof bigint

  • txid_snapshot_xmax(txid_snapshot)

    描述:获取快照的xmax。

    返回类型:bigint

  • txid_snapshot_xmin(txid_snapshot)

    描述:获取快照的xmin。

    返回类型:bigint

  • 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。

计算子集群函数

pv_compute_pool_workload()

描述:返回计算子集群当前的负载状态。

返回类型:void

示例:

1
2
3
4
5
6
SELECT * from pv_compute_pool_workload();
 nodename  | rpinuse | maxrp | nodestate
-----------+---------+-------+-----------
 datanode1 |       0 |  1000 | normal
 datanode2 |       0 |  1000 | normal
(2 rows)

锁信息函数

pgxc_get_lock_conflicts()

描述:返回集群中有冲突的锁信息。当某个锁正在等待另一个锁,或正被另一个锁等待,则认为该锁是冲突的。

返回类型:setof record