本节描述的功能用于获取关于 PostgreSQL 安装的各种信息。
表 9.69 显示了几个提取会话和系统信息的函数。
除本节中列出的函数外,还有一系列与统计系统相关的函数,也提供系统信息。有关更多信息,请参见第 27.2.26 节。
表 9.69. 会话信息函数
函数 说明 |
---|
返回当前数据库的名称。(在 SQL 标准中将数据库称为“目录”,因此 |
返回当前执行查询的文本,如客户端提交时所示(可能包含多个语句)。 |
这相当于 |
返回在搜索路径中位于第一位的架构的名称(如果搜索路径为空,则返回 null 值)。这是在未指定目标架构的情况下创建的任何表或其他命名对象的架构。 |
返回有效搜索路径中所有架构名称的数组,按其优先顺序排列。(当前 search_path 设置中与未搜索或可搜索的架构不对应的项将被省略。)如果布尔参数为 |
返回当前执行上下文的用户名。 |
返回当前客户端的 IP 地址,如果当前连接通过 Unix 域套接字进行,则返回 |
返回当前客户端的 IP 端口号,如果当前连接通过 Unix 域套接字进行,则返回 |
返回服务器接受当前连接时的 IP 地址,如果当前连接通过 Unix 域套接字进行,则返回 |
返回服务器接受当前连接时的 IP 端口号,如果当前连接通过 Unix 域套接字进行,则返回 |
返回连接到当前会话的服务器进程的进程 ID。 |
返回一个进程 ID 数组,其中包含使具有指定进程 ID 的服务器进程无法获取锁的会话的进程 ID,如果这样的服务器进程不存在或它未被阻止,则返回一个空数组。 如果一个服务器进程持有一个与被阻止进程的锁请求冲突的锁,或者正在等待一个会与被阻止进程的锁请求相冲突的锁,并且在等待队列中排在被阻止进程之前,则一个服务器进程会阻止另一个进程(硬阻止或软阻止)。在使用并行查询时,即使实际锁是由子工作进程持有或等待,该结果也会始终列出客户端可见的进程 ID(即 对该函数的频繁调用可能会对数据库性能产生一些影响,因为它需要在短时间内独占访问锁管理器的共享状态。 |
返回服务器配置文件上次加载时的时间。如果当前会话当时处于活动状态,这将是会话本身重新读取配置文件的时间(因此读取将在不同的会话中略有不同)。否则,这是后主进程重新读取配置文件的时间。 |
返回记录收集器当前使用的日志文件的路径名。此路径包括 log_directory 目录和各个日志文件的名称。如果记录收集器禁用,结果为 默认情况下,此函数仅限于超级用户和具有 |
返回当前会话的临时模式的 OID,如果该会话没有临时模式,则返回零(因为它没有创建任何临时表)。 |
如果给定的 OID 是另一个会话的临时模式的 OID,则返回 true。(例如,这可能有助于从目录显示中排除其他会话的临时表。) |
返回一个异步通知通道集合的名称,当前会话监听这些通道。 |
返回当前由等待处理的通知占用的异步通知队列最大大小的各部分 (0-1)。有关详细信息,请参阅LISTEN和NOTIFY。 |
返回服务器开始运行的时间。 |
返回具有指定进程 ID 的进程 ID 数组,该进程 ID 阻止了服务器进程获取安全快照,或者如果不存在此类服务器进程或该进程未被阻塞,则返回一个空数组。 正在运行 频繁调用此函数可能会对数据库性能产生一些影响,因为它需要在短时间内访问谓词锁管理器的共享状态。 |
返回 PostgreSQL 触发器的当前嵌套级别(如果未直接或间接从触发器内部调用,则为 0)。 |
返回会话用户的名称。 |
返回身份验证方法和用户在分配数据库角色之前在身份验证周期中提供的身份(如果存在)。它表示为 |
这相当于 |
current_catalog
、current_role
、current_schema
、current_user
、session_user
和 user
在SQL中具有特殊的语法状态:必须在没有尾随括号的情况下调用它们。在 PostgreSQL 中,括号可以选择与 current_schema
一起使用,但不能与其他函数一起使用。
通常,session_user
是启动当前数据库连接的用户;但超级用户可用 SET SESSION AUTHORIZATION更改此设置。current_user
适用于权限检查的用户标识符。它通常等于会话用户,但可用 SET ROLE更改它。它在执行属性为 SECURITY DEFINER
的函数时也会发生改变。用 Unix 术语来说,会话用户是 “real user”,而当前用户是 “effective user”。current_role
和 user
是 current_user
的同义词。(SQL 标准将 current_role
和 current_user
区分开来,但 PostgreSQL 不这样做,因为它将用户和角色统一为一个类别的实体。)
表 9.70 列出了可以以编程方式查询对象访问权限的函数。(有关权限的更多信息,请参见 第 5.8 节。)在这些函数中,可以通过名称或 OID (pg_authid
.oid
) 指定查询其权限的用户,或者如果将名称指定为 public
,则会检查 PUBLIC 伪角色的权限。此外,user
参数可以完全省略,在这种情况下,将假定 current_user
。也可以通过名称或 OID 指定要查询的对象。按名称指定时,如果相关,可以包含模式名称。要感兴趣的访问权限由文本字符串指定,该字符串必须对对象类型评估为其中一个合适的权限关键字(例如,SELECT
)。或者,可以将 WITH GRANT OPTION
添加到权限类型,以测试该权限是否具有的授予选项。此外,可以列出多个权限类型,并用逗号分隔,在这种情况下,如果持有任何列出的权限,结果都将为 true。(不区分权限字符串的大小写,允许在权限名称之间但不在其内部留出额外的空格。)一些示例
SELECT has_table_privilege('myschema.mytable', 'select'); SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');
表 9.70. 访问权限查询函数
函数 说明 |
---|
用户是否对表中有任何列特权?这在拥有整个表的特权或至少为一列授予列级特权时才成功。允许的特权类型包括 |
用户是否对指定表列有特权?这在拥有整个表的特权或为该列授予列级特权时才成功。列可通过名称或属性号指定 ( |
用户是否对数据库有特权?允许的特权类型包括 |
用户是否对外部数据封装有特权?唯一允许的特权类型为 |
用户是否拥有对函数的权限?唯一允许的权限类型是 按名称而不是按 OID 指定函数时,允许的输入与 SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute'); |
用户是否拥有该语言的权限?唯一允许的权限类型是 |
用户是否拥有配置文件参数权限?参数名称不区分大小写。允许的权限类型是 |
用户是否拥有该模式的权限?允许的权限类型有 |
用户是否拥有该序列的权限?允许的权限类型有 |
用户是否对外部服务器拥有权限?唯一允许的权限类型是 |
用户是否对表拥有权限?允许的权限类型包括 |
用户是否对表空间拥有权限?唯一允许的权限类型是 |
用户是否对数据类型拥有权限?唯一允许的权限类型是 |
用户是否拥有角色权限?允许的权限类型为 |
是否在当前用户和当前环境的上下文中针对指定表激活行级别安全性? |
表 9.71 显示可用于 aclitem
类型的运算符,此类型是访问权限的目录表示方式。请参阅 第 5.8 节,了解如何读取访问权限值的信息。
表 9.71. aclitem
运算符
表 9.72 显示了一些用于管理 aclitem
类型的附加函数。
表 9.72. aclitem
函数
函数 说明 |
---|
生成一个 |
将 |
构造具有给定属性的 |
表 9.73 显示用于确定当前模式搜索路径中特定对象是否 可见 的函数。例如,如果其包含模式在搜索路径中,并且没有同名表出现在搜索路径的前面,则该表被称为可见的。这相当于该表可以通过名称引用,而无需显式模式限定。因此,要列出所有可见表的名称
SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);
对于函数和运算符,搜索路径中的对象被认为是可见的,如果其名称 和参数数据类型 在路径中前面没有同名对象。对于运算符类型和族,则同时考虑名称和相关的索引访问方法。
表 9.73. 架构可见性查询函数
所有这些功能都需要对象 OID 来识别要检查的对象。如果您想按名称测试对象,请使用 OID 别名类型(regclass
、regtype
、regprocedure
、regoperator
、regconfig
或 regdictionary
),例如
SELECT pg_type_is_visible('myschema.widget'::regtype);
请注意,这样测试非模式限定类型名称没有多大意义——如果名称根本无法识别,则该名称必须可见。
表 9.74列出了从系统目录提取信息的函数。
表 9.74. 系统目录信息功能
函数 说明 |
---|
返回由类型 OID 及可能由类型修饰符标识的数据类型的 SQL 名称。如果不知道具体的修饰符,请传递 NULL 作为类型修饰符。 |
返回由类型 OID 标识的域的基本类型的 OID。如果参数是非域类型的 OID,则按原样返回该参数。如果参数不是有效的类型 OID,则返回 NULL。如果存在域依赖链,它将递归直至找到基本类型。 假设
|
将提供的编码名称转换成表示某些系统目录表中使用的内部标识符的整数。如果提供了未知编码名称,则返回 |
将某些系统目录表中用作编码内部标识符的整数转换成可读字符串。如果提供了无效的编码编号,则返回空字符串。 |
返回描述 PostgreSQL 系统目录中存在的外键关系的记录集。 |
为约束重建创建命令。(这是一个反编译的重建,而不是命令的原始文本。) |
反编译存储在系统目录中的表达式的内部形式,例如列的默认值。如果表达式可能包含 Vars,请将它们引用的关系的 OID 指定为第二个参数;如果不期望 Vars,则传递 0 就足够了。 |
重构某个函数或过程的创建命令。(这是一种反编译的重构,而非该命令的原始文本。)结果为一条完整的 |
以需要在 |
以需要在诸如 |
以需要在 |
为某个索引重构创建命令。(这是一种反编译的重构,而非该命令的原始文本。)如果提供了 |
返回描述服务器识别的 SQL 关键字的一组记录。 |
重建分区表的PARTITION BY子句中分区键的定义。 (这是一个反编译重建,而不是命令的原始文本。) |
重建用于创建规则的命令。 (这是一个反编译重建,而不是命令的原始文本。) |
返回与列关联的序列名称或 NULL(如果没有序列与该列关联)。如果该列是标识列,则关联序列就是为该列内部创建的序列。对于使用其中一种序列类型 ( 一个典型的用法是用在读取标识或序列列的序列当前值,例如 SELECT currval(pg_get_serial_sequence('sometable', 'id')); |
重建扩展统计对象创建命令。(这是一种反编译重建,而不是命令的原始文本。) |
重建触发器创建命令。(这是一种反编译重建,而不是命令的原始文本。) |
根据角色的 OID 返回角色的名称。 |
重建视图或物化视图中潜在的 |
重建视图或物化视图中潜在的 |
根据视图的文本名称而不是其 OID,重建视图或物化视图中潜在的 |
测试索引列是否具有命名的属性。常见的索引列属性列在 表 9.75 中。(注意扩展访问方法可以为其索引定义其他属性名称。)如果不知道属性名称或其不适用于特定对象,或者如果 OID 或列号未识别出有效对象,则返回 |
测试索引是否具有命名的属性。常见的索引属性列在 表 9.76 中。(注意扩展访问方法可以为其索引定义其他属性名称。)如果不知道属性名称或其不适用于特定对象,或者如果 OID 未识别出有效对象,则返回 |
测试索引访问方法是否具有已命名的属性。访问方法属性在表 9.77中列出。 |
返回由 |
返回与给定 GUC 相关联的标志数组,或 |
返回存储在指定表空间中的对象的数据库 OID 集合。如果此函数返回任何行,则表空间不为空,不能丢弃。要识别填充表空间的特定对象,您需要连接到 |
返回此表空间所在的文件系统路径。 |
返回传递给它的值的的数据类型的 OID。这有助于解决问题或动态构造 SQL 查询。该函数声明为返回
|
返回传递给它的值的排序规则名称。该值将加上引号并加前缀架构(如果需要)。如果没有为参数表达式派生出排序规则,则返回
|
将文本关系名称转换为其 OID。通过将字符串强制转换为类型 |
将文本排序规则名称转换为其 OID。通过将字符串强制转换为类型 |
将文本模式名称转换为其 OID。通过将字符串强制转换为类型 |
将文本操作符名称转换为其 OID。 将字符串转换为类型 |
将文本操作符名称(包含参数类型)转换为其 OID。 将字符串转换为类型 |
将文本函数或过程名称转换为其 OID。 将字符串转换为类型 |
将文本函数或过程名称(带参数类型)转换为其 OID。 将字符串转换为类型 |
将文本角色名称转换为其 OID。 将字符串转换为类型 |
解析一段文本,提取其中的潜在类型名称,然后将该名称转换为类型 OID。 字符串中出现语法错误将导致错误;但如果该字符串是合法的类型名称,恰巧没有在目录中找到,结果则为 |
解析文本字符串,提取潜在类型名称并转换其类型修饰符(如果存在)。字符串中的语法错误将导致错误;但如果字符串是语法有效类型名称,但恰巧在目录中找不到,则结果将为
|
大多数用于重建(反编译)数据库对象的函数都具有一个可选的 pretty
标记,如果为 true
,则结果将为 “pretty-printed”。pretty-printed 会取消是不必要的括号,并添加空格以提高可读性。pretty-printed 格式更易于理解,但 PostgreSQL 的未来版本更有可能以相同的方式解释默认格式;因此,请避免在转储中使用 pretty-printed 输出。为 pretty
参数传递 false
会产生与省略参数相同的结果。
表 9.75. 索引列属性
名称 | 说明 |
---|---|
asc |
该列在正向扫描时按升序排序吗? |
desc |
该列在正向扫描时按降序排序吗? |
nulls_first |
该列在正向扫描时以 null 值优先的顺序排序吗? |
nulls_last |
该列在正向扫描时以 null 值后置的顺序排序吗? |
orderable |
该列是否拥有任何已定义的排序顺序? |
distance_orderable |
该列可按 “距离”运算符按顺序扫描,例如 ORDER BY col <-> constant ? |
returnable |
该列值可由仅索引扫描返回吗? |
search_array |
该列是否本机支持 col = ANY(array) 搜索? |
search_nulls |
该列是否支持 IS NULL 和 IS NOT NULL 搜索? |
表 9.76. 索引属性
名称 | 说明 |
---|---|
clusterable |
该索引可用于 CLUSTER 命令吗? |
index_scan |
该索引是否支持普通(非位图)扫描? |
bitmap_scan |
该索引是否支持位图扫描? |
backward_scan |
是否可以在中间扫描时更改扫描方向(以支持在无需物化的光标上执行 FETCH BACKWARD )? |
表 9.77. 索引访问方法属性
名称 | 说明 |
---|---|
can_order |
访问方法是否支持 ASC 、DESC 和 CREATE INDEX 中的相关关键字? |
can_unique |
访问方法是否支持唯一索引? |
can_multi_col |
访问方法是否支持具有多列的索引? |
can_exclude |
访问方法是否支持排除约束? |
can_include |
访问方法是否支持 CREATE INDEX 的 INCLUDE 子句? |
表 9.78. GUC 标志
标志 | 说明 |
---|---|
EXPLAIN |
具有此标志的参数包含在 EXPLAIN (SETTINGS) 命令中。 |
NO_SHOW_ALL |
具有此标志的参数从 SHOW ALL 命令中排除。 |
NO_RESET |
具有此标志的参数不支持 RESET 命令。 |
NO_RESET_ALL |
具有此标志的参数从 RESET ALL 命令中排除。 |
NOT_IN_SAMPLE |
默认情况下,具有此标志的参数不包含在 postgresql.conf 中。 |
RUNTIME_COMPUTED |
具有此标志的参数是运行时计算的参数。 |
表 9.79 列出了与数据库对象标识和寻址相关的函数。
表 9.79. 对象信息和寻址函数
在 表 9.80 中显示的函数提取与 COMMENT 命令一起存储的注释。如果未找到特定参数的注释,则返回 null 值。
表 9.80. 注释信息函数
在 表 9.81 中显示的函数有助于检查提议输入数据的有效性。
表 9.81. 数据有效性检查函数
表 9.82 中显示的函数提供可导出形式的服务器事务信息。这些函数的主要用途是确定在两个快照之间提交了哪些事务。
表 9.82. 事务 ID 和快照信息函数
函数 说明 |
---|
返回当前事务的 ID。如果当前事务尚未具有一个 ID(因为它未执行任何数据库更新),它将分配一个新的 ID;有关详细信息,请参阅 第 66.1 节。如果在子事务中执行此操作,这将返回顶级事务 ID;有关详细信息,请参阅 第 66.3 节。 |
返回当前事务的 ID,或在尚未分配 ID 的情况下返回 |
报告最近事务的提交状态。结果之一为 |
返回当前的快照,它是一种数据结构,显示了哪些事务 ID 目前正在进行中。快照中仅包含顶级事务 ID;不会显示子事务 ID;有关详细信息,请参阅 第 66.3 节。 |
返回快照中包含的正在进行的事务 ID 的集合。 |
返回快照的 |
返回快照的 |
给定的事务 ID 根据此快照是否可见(即在获取快照前是否已完成)?请注意,此函数不会为子事务 ID (subxid) 提供正确答案;有关详细信息,请参阅第 66.3 节。 |
内部事务 ID 类型 xid
为 32 位宽,每 40 亿个事务循环一次。但是,表 9.82 中显示的函数使用 64 位类型 xid8
,该类型在安装过程的整个生命周期内不会循环利用,如果需要,可以通过强制转换将其转换为 xid
;有关详细信息,请参阅第 66.1 节。数据类型 pg_snapshot
存储有关事务 ID 在特定时刻的可见性信息。其组件在表 9.83中进行描述。 pg_snapshot
的文本表示形式为
。例如, xmin
:xmax
:xip_list
10:20:10,14,15
表示 xmin=10, xmax=20, xip_list=10, 14, 15
。
表 9.83. 快照组件
名称 | 说明 |
---|---|
xmin |
最低仍处于活动状态的事务 ID。小于 xmin 的所有事务 ID 都已提交并且可见,或已回滚且已终止。 |
xmax |
已完成的事务 ID 加一。大于或等于 xmax 的所有事务 ID 直至快照时间点仍未完成,因此不可见。 |
xip_list |
在快照时间点进行中的事务。一个 xmin <= 不在此列表中的事务 ID 已在快照时间点完成,因此根据其提交状态而可见或已终止。此列表不包含子事务 (subxids) 的事务 ID。 |
在 13 版之前的 PostgreSQL 版本中没有 xid8
类型,所以提供了这些函数的变体,这些变体使用 bigint
表示 64 位 XID,具有相应不同的快照数据类型 txid_snapshot
。这些较早的函数的名称中带有 txid
。它们仍受支持以保持向后兼容性,但可能会从未来版本中移除。请参见 表 9.84。
表 9.84。已弃用的事务 ID 和快照信息函数
在 表 9.85 中显示的函数提供有关过去事务提交时间的信息。 它们仅在 track_commit_timestamp 配置选项启用后提供有用的数据,并且仅对已提交的事务启用此选项。清除真空后通常会删除提交时间戳信息。
表 9.85. 已提交事务信息函数
在 表 9.86 中显示的函数打印在 initdb
期间初始化的信息,例如目录版本。 它们还显示有关预写式日志记录和检查点处理的信息。 此信息是集群范围内的,不特定于任何数据库。 这些函数从与 pg_controldata 应用程序相同的来源提供大部分相同的信息。
表 9.86. 控制数据函数
表 9.87。pg_control_checkpoint
输出列
列名 | 数据类型 |
---|---|
checkpoint_lsn |
pg_lsn |
redo_lsn |
pg_lsn |
redo_wal_file |
文本 |
timeline_id |
整数 |
prev_timeline_id |
整数 |
full_page_writes |
布尔值 |
next_xid |
文本 |
next_oid |
oid |
next_multixact_id |
xid |
next_multi_offset |
xid |
oldest_xid |
xid |
oldest_xid_dbid |
oid |
oldest_active_xid |
xid |
oldest_multi_xid |
xid |
oldest_multi_dbid |
oid |
oldest_commit_ts_xid |
xid |
newest_commit_ts_xid |
xid |
checkpoint_time |
带时区的时间戳 |
表 9.88。pg_control_system
输出列
列名 | 数据类型 |
---|---|
pg_control_version |
整数 |
catalog_version_no |
整数 |
system_identifier |
bigint |
pg_control_last_modified |
带时区的时间戳 |
表 9.89。pg_control_init
输出列
列名 | 数据类型 |
---|---|
max_data_alignment |
整数 |
database_block_size |
整数 |
blocks_per_segment |
整数 |
wal_block_size |
整数 |
bytes_per_wal_segment |
整数 |
max_identifier_length |
整数 |
max_index_columns |
整数 |
max_toast_chunk_size |
整数 |
large_object_chunk_size |
整数 |
float8_pass_by_value |
布尔值 |
data_page_checksum_version |
整数 |
表 9.90。pg_control_recovery
输出列
列名 | 数据类型 |
---|---|
min_recovery_end_lsn |
pg_lsn |
min_recovery_end_timeline |
整数 |
backup_start_lsn |
pg_lsn |
backup_end_lsn |
pg_lsn |
end_of_backup_record_required |
布尔值 |
表 9.91 中所示的函数打印版本信息。
表 9.91。版本信息函数
函数 说明 |
---|
返回值描述 PostgreSQL 服务器版本的字符串。您也可以从 server_version 获取此信息,或使用 server_version_num 获取机器可读版本。软件开发者应使用 |
返回值表示 PostgreSQL 使用的 Unicode 版本的字符串。 |
返回值表示 ICU 使用的 Unicode 版本的字符串(如果服务器使用 ICU 支持构建);否则返回值为 |
表 9.92 中显示的函数打印有关 WAL 汇总状态的信息。参见 summarize_wal。
表 9.92. WAL 汇总信息函数