更新时间:2025-05-29 GMT+08:00
分享

会话信息函数

SYS_CONTEXT()

描述:返回当前时刻与上下文命名空间'namespace'关联的参数'parameter'的值,该函数功能在第一个入参为'userenv'时与USERENV()功能一致。

当前支持的第二个入参参数:

'current_edition_name'、'current_schema'、'current_sql'、'current_user'、'current_userid'、'database_role'、'ip_address'、'is_apply_server'、'isdba'、'nls_currency'、'nls_date_format'、'nls_date_language'、'server_host'、'service_name'、'session_user'、'session_userid'、'db_name'、'db_unique_name'、'instance'、'instance_name'、'current_edition_id'、'current_schemaid'、'lang'、'language'、'sid'

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
SELECT SYS_CONTEXT('userenv','NLS_CURRENCY');
 sys_context 
-------------
 $
(1 row)

SELECT SYS_CONTEXT('userenv','NLS_DATE_FORMAT');
  sys_context  
---------------
 ISO, MDY
(1 row)

SELECT SYS_CONTEXT('userenv','NLS_DATE_LANGUAGE');
 sys_context 
-------------
 en_US.UTF-8
(1 row)

USERENV()

描述:返回当前时刻与上下文命名空间'namespace'关联的参数'parameter'的值,该函数功能与SYS_CONTEXT()在第一个入参为'userenv'时功能一致。

当前支持的入参:

'current_edition_name'、'current_schema'、'current_sql'、'current_user'、'current_userid'、'database_role'、'ip_address'、'is_apply_server'、'isdba'、'nls_currency'、'nls_date_format'、'nls_date_language'、'server_host'、'service_name'、'session_user'、'session_userid'、'db_name'、'db_unique_name'、'instance'、'instance_name'、'current_edition_id'、'current_schemaid'、'lang'、'language'、'sid'

当前不支持的入参:

'action'、'is_application_root'、'is_application_pdb'、'audited_cursorid'、'authenticated_identity'、'authentication_data'、'authentication_method'、'cdb_domain'、'cdb_name'、'client_identifier'、'con_id'、'con_name'、'current_sql_length'、'db_domain'、'db_supplemental_log_level'、'dblink_info'、'drain_status'、'entryid'、'enterprise_identity'、'fg_job_id'、'global_uid'、'identification_type'、'is_dg_rolling_upgrade'、'ldap_server_type'、'module'、'network_protocol'、'nls_calendar'、'nls_sort'、'nls_territory'、'oracle_home'、'os_user'、'platform_slash'、'policy_invoker'、'proxy_enterprise_identity'、'proxy_user'、'proxy_userid'、'scheduler_job'、'session_edition_id'、'session_edition_name'、'sessionid'、'statementid'、'terminal'、'unified_audit_sessionid'、'session_default_collation'、'client_info'、'bg_job_id'、'client_program_name'、'current_bind'、'global_context_memory'、'host'、'current_sqln'

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
SELECT USERENV('sid');
 userenv 
---------
 955
(1 row)

SELECT USERENV('instance');
 userenv 
---------
 14524
(1 row)

SELECT USERENV('action');
 userenv 
---------

(1 row)

SELECT USERENV('actijj');
ERROR:  unrecognized configuration parameter "actijj"
CONTEXT:  PL/pgSQL function userenv(text) line 114 at RETURN
referenced column: userenv

当入参为当前不支持的入参时,则返回NULL;入参为非法入参时报错。

current_catalog()

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

返回值类型:name

示例:

1
2
3
4
5
testdb=# SELECT current_catalog;
 current_database
------------------  
 testdb
(1 row)

current_database()

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

返回值类型:name

示例:

1
2
3
4
5
testdb=# SELECT current_database();
 current_database
------------------
 testdb
(1 row)

current_query()

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

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT current_query();
      current_query
-------------------------
 SELECT current_query();
(1 row)

current_schema[()]

描述:当前模式的名称。

返回值类型:name

示例:

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

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

current_schemas(Boolean)

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

返回值类型:name[]

示例:

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

备注:

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

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

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

database()

描述:返回当前的schema的名称。

参数:无

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT database();
 database 
----------
 public
(1 row)

此函数在MYSQL模式数据库中,且GUC参数b_format_version = '5.7'和b_format_dev_version = 's1'时生效。

current_user()

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

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT current_user;
 current_user
--------------
 omm
(1 row)

备注:current_user用于权限检查的用户标识。通常表示会话用户,可以通过SET ROLE进行修改。在函数执行的过程中,受SECURITY DEFINER属性影响。

definer_current_user

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

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT definer_current_user();
 definer_current_user
----------------------
 omm
(1 row)

备注:通常definer_current_user和current_user结果相同,但在存储过程中执行该函数会返回定义当前存储过程的用户名。

pg_current_sessionid()

描述:当前执行环境下的会话ID。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT pg_current_sessionid();
    pg_current_sessionid
----------------------------
 1579228402.140190434944768
(1 row)

备注:pg_current_sessionid()是用于获取当前执行环境下的会话ID。其组成结构为:时间戳.会话ID,当线程池模式开启(enable_thread_pool=on)时,会话ID为SessionID;而线程池模式关闭时,会话ID实际为线程ID。

pg_current_sessid()

描述:当前执行环境下的会话ID。

返回值类型:text

示例:

gaussdb=# select pg_current_sessid();
pg_current_sessid
-------------------
140308875015936
(1 row)

备注:在线程池模式下获得当前会话的会话ID,非线程池模式下获得当前会话对应的后台线程ID。

pg_current_userid()

描述:当前用户ID。

返回值类型:text

示例:

gaussdb=# SELECT pg_current_userid();
pg_current_userid
-------------------
10
(1 row)

tablespace_oid_name(oid)

描述:根据表空间oid,查找表空间名称。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# select tablespace_oid_name(1663);
 tablespace_oid_name
---------------------
 pg_default
(1 row)

inet_client_addr()

描述:连接的远端地址。inet_client_addr返回当前客户端的IP地址。

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

返回值类型:inet

示例:

1
2
3
4
5
gaussdb=# SELECT inet_client_addr();
 inet_client_addr
------------------
 10.10.0.50
(1 row)

inet_client_port()

描述:连接的远端端口。inet_client_port返回当前客户端的端口号。

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

返回值类型:int

示例:

1
2
3
4
5
gaussdb=# SELECT inet_client_port();
 inet_client_port
------------------
            33143
(1 row)

inet_server_addr()

描述:连接的本地地址。inet_server_addr返回服务器接收当前连接用的IP地址。

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

返回值类型:inet

示例:

1
2
3
4
5
gaussdb=# SELECT inet_server_addr();
 inet_server_addr
------------------
 10.10.0.13
(1 row)

inet_server_port()

描述:连接的本地端口。inet_server_port返回接收当前连接的端口号。如果是通过Unix-domain socket连接的,则所有这些函数都返回NULL。

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

返回值类型:int

示例:

1
2
3
4
5
gaussdb=# SELECT inet_server_port();
 inet_server_port
------------------
             8000
(1 row)

pg_backend_pid()

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

返回值类型:int

示例:

1
2
3
4
5
gaussdb=# 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
gaussdb=# 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
gaussdb=# 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
gaussdb=# SELECT pg_is_other_temp_schema(25356);
 pg_is_other_temp_schema
-------------------------
 f
(1 row)

pg_listening_channels()

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

返回值类型:setof text

示例:

1
2
3
4
gaussdb=# 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
gaussdb=# SELECT pg_postmaster_start_time();
   pg_postmaster_start_time   
------------------------------
 2017-08-30 16:02:54.99854+08
(1 row)

sessionid2pid()

描述:从sessionid中得到pid信息(如: pv_session_stat中sessid列)。

返回值类型:int8

示例:

1
2
3
4
5
6
gaussdb=# select sessionid2pid(sessid::cstring) from pv_session_stat limit 2;
  sessionid2pid
-----------------
 139973107902208
 139973107902208
(2 rows)

session_context( 'namespace' , 'parameter')

描述:获取并返回指定namespace下参数parameter的值。

返回值类型:VARCHAR

示例:

1
2
3
4
5
gaussdb=# SELECT session_context('USERENV', 'CURRENT_SCHEMA');
 session_context 
-------------
 public
(1 row)

根据当前所在的实际schema而变化。

备注:目前仅支持SESSION_CONTEXT('USERENV', 'CURRENT_SCHEMA') 和SESSION_CONTEXT('USERENV', 'CURRENT_USER')两种格式。

pg_trigger_depth()

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

返回值类型:int

示例:

1
2
3
4
5
gaussdb=# SELECT pg_trigger_depth();
 pg_trigger_depth 
------------------
                0
(1 row)

opengauss_version()

描述:引用的openGauss内核版本信息。

返回值类型:text

使用示例如下,查询结果中的x.x.x请以实际输出为准:

1
2
3
4
5
gaussdb=# SELECT opengauss_version();
 opengauss_version
-------------------
 x.x.x
(1 row)

gs_deployment()

描述:当前系统的部署形态信息,对于分布式系统来说返回的是“Distribute”。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT gs_deployment();
 gs_deployment
---------------
 Distribute
(1 row)

session_user

描述:会话用户名。

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT session_user;
 session_user
--------------
 omm
(1 row)

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

user

描述:等价于current_user。

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT user;
 current_user
--------------
 omm
(1 row)

get_shard_oids_byname()

描述:输入node的名字返回node的oid。

返回值类型:oid

示例:

1
2
3
4
5
gaussdb=# SELECT get_shard_oids_byname('datanode1');
 get_shard_oids_byname
-----------------------
 {16385}
(1 row)

getpgusername()

描述:获取数据库用户名。

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT getpgusername();
 getpgusername 
---------------
 GaussDB_userna
(1 row)

getdatabaseencoding()

描述:获取数据库编码方式。

返回值类型:name

示例:

1
2
3
4
5
gaussdb=# SELECT getdatabaseencoding();
 getdatabaseencoding 
---------------------
 SQL_ASCII
(1 row)

version()

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

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT version();
                                                                                         version
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 gaussdb (GaussDB XXX.XXX.XXX build f521c606) compiled at 2021-09-16 14:55:22 commit 2935 last mr 6385 release
(1 row)

working_version_num()

描述:版本序号信息。返回一个系统兼容性有关的版本序号。

返回值类型:int

示例:

1
2
3
4
5
gaussdb=# SELECT working_version_num();
 working_version_num
---------------------
               92231
(1 row)

get_hostname()

描述:返回当前节点的hostname。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT get_hostname();
 get_hostname
--------------
 linux-user
(1 row)

get_nodename()

描述:返回当前节点的名字。

返回值类型:text

示例:

1
2
3
4
5
gaussdb=# SELECT get_nodename();
 get_nodename
--------------
 coordinator1
(1 row)

get_nodeinfo(text)

描述:根据检索的属性返回对应的节点信息的值,可检索属性目前包括node_name和node_type。

返回值类型:text

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
gaussdb=# SELECT get_nodeinfo('node_type');
 get_nodeinfo 
--------------
 DIS_CN
(1 row)
gaussdb=# SELECT get_nodeinfo('node_name');
 get_nodeinfo 
--------------
 coordinator1
(1 row)

get_schema_oid(cstring)

描述:返回查询schema的oid。

返回值类型:oid

示例:

1
2
3
4
5
gaussdb=# SELECT get_schema_oid('public');
 get_schema_oid
----------------
           2200
(1 row)

pgxc_parse_clog(OUT xid int8, OUT nodename text, OUT status text)

描述:返回当前集群中普通表所有事务的状态。

返回值类型:set of record

示例:

1
2
3
4
5
6
7
gaussdb=# SELECT pgxc_parse_clog();
 pgxc_parse_clog
----------------
(0,dn_6004_6005_6006,INPROGRESS)
(1,dn_6004_6005_6006,COMMITTED)
(2,dn_6004_6005_6006,INPROGRESS)
(3 row)

pgxc_parse_clog(IN int2 bucketid, OUT xid int8, OUT nodename text, OUT status text)

描述:返回当前集群中指定bucketid的所有事务的状态,入参是hash bucket表bucketid,取值范围[-1,1023],普通表取值-1。

返回值类型:set of record

示例:

1
2
3
4
5
6
7
gaussdb=# SELECT pgxc_parse_clog('-1');
 pgxc_parse_clog
----------------
(0,dn_6004_6005_6006,INPROGRESS)
(1,dn_6004_6005_6006,COMMITTED)
(2,dn_6004_6005_6006,INPROGRESS)
(3 row)

pgxc_prepared_xact()

描述:返回集群中处于prepared阶段事务GID列表。

返回值类型:set of text

示例:

1
2
3
4
gaussdb=# SELECT pgxc_prepared_xact();
 pgxc_prepared_xact
--------------------          
(0 row)

pgxc_xacts_iscommitted()

描述:返回集群中指定事务xid的事务的状态。t代表committed;f代表aborted;null代表others。需要sysadmin或者monadmin权限执行。

返回值类型:set of record

示例:

1
2
3
4
5
6
7
8
gaussdb=# SELECT pgxc_xacts_iscommitted(1);
 pgxc_xacts_iscommitted
--------------------    
(dn_6004_6005_6006,t)
(cn_5001,t)
(cn_5002,t)
(dn_6001_6002_6003,t)      
(4 row)

pgxc_total_memory_detail()

描述:显示集群内存使用情况。需要sysadmin或者monadmin权限执行。

若GUC参数enable_memory_limit=off,该函数不能使用。

返回值类型:set of pv_total_memory_detail

示例:

1
2
3
4
5
6
7
8
gaussdb=# SELECT pgxc_total_memory_detail();
pgxc_total_memory_detail
--------------------    
(dn_6004_6005_6006,max_process_memory,81920)
(dn_6004_6005_6006,process_used_memory,72747)
(dn_6004_6005_6006,max_dynamic_memory,12096)
(dn_6004_6005_6006,dynamic_used_memory,1530)      
(4 row)

pv_total_memory_detail()

描述:统计当前数据库节点使用内存的信息,单位为MB。

若GUC参数enable_memory_limit=off,该函数不能使用。

返回值类型:record

表1 返回值说明

名称

类型

描述

nodename

text

节点名称。

memorytype

text

内存类型,包括以下几种:
  • max_process_memory:GaussDB集群实例所占用的内存大小。
  • process_used_memory:GaussDB线程所使用的内存大小。
  • max_dynamic_memory:最大动态内存。
  • dynamic_used_memory:已使用的动态内存。
  • dynamic_peak_memory:内存的动态峰值。
  • dynamic_used_shrctx:最大动态共享内存上下文。
  • dynamic_peak_shrctx:共享内存上下文的动态峰值。
  • max_shared_memory:最大共享内存。
  • shared_used_memory:已使用的共享内存。
  • max_sctpcomm_memory:通信库所允许使用的最大内存。
  • sctpcomm_used_memory:通信库已使用的内存大小。
  • sctpcomm_peak_memory:通信库的内存峰值。
  • other_used_memory:其他已使用的内存大小。

memorymbytes

integer

内存类型分配内存的大小。

get_client_info()

描述:返回客户端信息。

返回值类型:record

pv_session_memory_detail()

描述:返回会话的内存使用情况,以MemoryContext节点来统计。

返回值类型:record

表2 返回值说明

名称

类型

描述

sessid

text

  • 关闭线程池(enable_thread_pool = off)时该字段表示线程启动时间+session标识(字符串信息为timestamp.sessionid)。
  • 开启线程池(enable_thread_pool = on)时,内存上下文是线程级别的,则对应的该字段表示线程启动时间+线程标识(字符串信息为timestamp.threadid),内存上下文是session级别的,则对应的该字段表示线程启动时间+session标识(字符串信息为timestamp.sessionid)。

threadid

bigint

会话绑定的线程标识。

contextname

text

内存上下文名称。

level

smallint

当前上下文在整体内存上下文中的层级。

parent

text

父内存上下文名称。

totalsize

bigint

当前内存上下文的内存总数,单位Byte。

freesize

bigint

当前内存上下文中已释放的内存总数,单位Byte。

usedsize

bigint

当前内存上下文中已使用的内存总数,单位Byte;“TempSmallContextGroup”内存上下文中该字段含义为统计计数。

相关文档