本节中描述的函数用于获取有关 PostgreSQL 安装的各种信息。
表 9.69 显示了几个提取会话和系统信息的函数。
除了本节列出的函数外,还有一些与统计系统相关的函数也提供系统信息。 有关更多信息,请参见 第 27.2.26 节。
表 9.69. 会话信息函数
函数 描述 |
---|
返回当前数据库的名称。(数据库在 SQL 标准中称为“目录”,因此 |
返回当前正在执行的查询的文本,由客户端提交(可能包含多个语句)。 |
这等效于 |
返回搜索路径中第一个模式的名称(如果搜索路径为空,则返回 null 值)。这是将用于创建任何没有指定目标模式的表或其他命名对象的模式。 |
返回当前有效搜索路径中所有模式的名称数组,按其优先级顺序排列。(当前 search_path 设置中与现有可搜索模式不对应的项将被省略。)如果布尔参数为 |
返回当前执行上下文的用户名。 |
返回当前客户端的 IP 地址,如果当前连接是通过 Unix 域套接字,则返回 |
返回当前客户端的 IP 端口号,如果当前连接是通过 Unix 域套接字,则返回 |
返回服务器接受当前连接的 IP 地址,如果当前连接是通过 Unix 域套接字,则返回 |
返回服务器接受当前连接的 IP 端口号,如果当前连接是通过 Unix 域套接字,则返回 |
返回附加到当前会话的服务器进程的进程 ID。 |
返回阻止具有指定进程 ID 的服务器进程获取锁的会话的进程 ID 数组,如果不存在此类服务器进程或它未被阻止,则返回空数组。 如果一个服务器进程持有与被阻止进程的锁请求冲突的锁(硬阻塞),或者正在等待一个与被阻止进程的锁请求冲突的锁,并且在等待队列中位于其之前(软阻塞),则该服务器进程会阻塞另一个进程。使用并行查询时,结果始终列出客户端可见的进程 ID(即 频繁调用此函数可能会对数据库性能产生一定影响,因为它需要短时间独占访问锁管理器的共享状态。 |
返回上次加载服务器配置文件的时间。 如果当前会话在该时间处于活动状态,则这将是会话本身重新读取配置文件的时间(因此,在不同会话中,读取时间会略有不同)。否则,这是 postmaster 进程重新读取配置文件的时间。 |
返回日志收集器当前正在使用的日志文件的路径名。 该路径包括 log_directory 目录和单个日志文件名。 如果禁用日志收集器,则结果为 默认情况下,此函数仅限于超级用户和具有 |
返回当前会话的临时模式的 OID,如果没有临时模式(因为它没有创建任何临时表),则返回零。 |
如果给定的 OID 是另一个会话的临时模式的 OID,则返回 true。(例如,这可以用于从目录显示中排除其他会话的临时表。) |
返回当前会话正在监听的异步通知通道的名称集合。 |
返回当前正在等待处理的通知所占用的异步通知队列的最大大小的比例(0-1)。有关更多信息,请参阅 LISTEN 和 NOTIFY。 |
返回服务器启动的时间。 |
返回阻止具有指定进程 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 术语中,会话用户是 “实际用户”,当前用户是 “有效用户”。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
类型可用的运算符,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,则传递零就足够了。 |
重建函数或过程的创建命令。(这是一个反编译的重建,而不是命令的原始文本。)结果是一个完整的 |
重建函数或过程的参数列表,其形式应出现在 |
重建用于标识函数或过程的参数列表,其形式应出现在诸如 |
重建函数的 |
重建索引的创建命令。(这是一个反编译的重建,而不是命令的原始文本。)如果提供了 |
返回一组描述服务器识别的 SQL 关键字的记录。 |
重建分区表的“分区键”定义,其形式应出现在 |
重建规则的创建命令。(这是一个反编译的重建,而不是命令的原始文本。) |
返回与列关联的序列的名称,如果该列没有关联的序列,则返回 NULL。如果该列是一个标识列,则关联的序列是内部为该列创建的序列。对于使用序列类型之一( 一个典型的用法是读取标识列或序列列的序列的当前值,例如 SELECT currval(pg_get_serial_sequence('sometable', 'id')); |
重建扩展统计对象的创建命令。(这是一个反编译的重建,不是命令的原始文本。) |
重建触发器的创建命令。(这是一个反编译的重建,不是命令的原始文本。) |
返回给定 OID 的角色的名称。 |
重建视图或物化视图的底层 |
重建视图或物化视图的底层 |
从视图的文本名称而不是其 OID 重建视图或物化视图的底层 |
测试索引列是否具有指定的属性。常见的索引列属性在表 9.75中列出。(请注意,扩展访问方法可以为其索引定义其他属性名称。)如果属性名称未知或不适用于特定对象,或者 OID 或列号未标识有效对象,则返回 |
测试索引是否具有指定的属性。常见的索引属性在表 9.76中列出。(请注意,扩展访问方法可以为其索引定义其他属性名称。)如果属性名称未知或不适用于特定对象,或者 OID 未标识有效对象,则返回 |
测试索引访问方法是否具有指定的属性。访问方法属性在表 9.77中列出。如果属性名称未知或不适用于特定对象,或者 OID 未标识有效对象,则返回 |
返回由 |
返回与给定 GUC 关联的标志数组,如果不存在,则返回 |
返回在指定表空间中存储了对象的数据库的 OID 集。如果此函数返回任何行,则表示表空间不为空,无法删除。要标识填充表空间的特定对象,您需要连接到 |
返回此表空间所在的 文件系统路径。 |
返回传递给它的值的数据类型的 OID。这对于故障排除或动态构造 SQL 查询很有用。该函数被声明为返回
|
返回传递给它的值的排序规则的名称。如果需要,该值会被引号引起来并进行模式限定。如果没有为参数表达式派生出排序规则,则返回
|
将文本关系名称转换为其 OID。通过将字符串转换为 |
将文本排序规则名称转换为其 OID。通过将字符串转换为 |
将文本模式名称转换为其 OID。通过将字符串转换为 |
将文本运算符名称转换为其 OID。通过将字符串转换为 |
将文本运算符名称(带参数类型)转换为其 OID。通过将字符串转换为 |
将文本函数或过程名称转换为其 OID。通过将字符串转换为 |
将文本函数或过程名称(带参数类型)转换为其 OID。通过将字符串转换为 |
将文本角色名转换为其 OID。将字符串强制转换为 |
解析文本字符串,从中提取潜在的类型名称,并将该名称转换为类型 OID。字符串中的语法错误将导致错误;但是,如果字符串是语法上有效的类型名称,但恰好在目录中找不到,则结果为 |
解析文本字符串,从中提取潜在的类型名称,并转换其类型修饰符(如果有)。字符串中的语法错误将导致错误;但是,如果字符串是语法上有效的类型名称,但恰好在目录中找不到,则结果为
|
大多数重构(反编译)数据库对象的函数都有一个可选的 pretty
标志,如果该标志为 true
,则会导致结果以““美化打印””的形式输出。美化打印会抑制不必要的括号,并添加空格以提高可读性。美化打印的格式更易于阅读,但默认格式更有可能被未来版本的 PostgreSQL 以相同的方式解释;因此,请避免将美化打印的输出用于转储目的。为 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 |
访问方法是否支持 CREATE INDEX 中的 ASC 、DESC 和相关关键字? |
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 大 1。所有大于或等于 xmax 的事务 ID 在快照时尚未完成,因此是不可见的。 |
xip_list |
快照时正在进行的事务。在 xmin <= 且不在该列表中的事务 ID 在快照时已完成,因此根据其提交状态是可见的还是失效的。此列表不包括子事务(subxid)的事务 ID。 |
在 13 之前的 PostgreSQL 版本中,没有 xid8
类型,因此提供了使用 bigint
来表示 64 位 XID 的这些函数的变体,以及相应的不同快照数据类型 txid_snapshot
。这些较旧的函数在它们的名称中带有 txid
。为了向后兼容,它们仍然受支持,但可能会在未来的版本中删除。请参见表 9.84。
表 9.84. 已弃用的事务 ID 和快照信息函数
表 9.85 中显示的函数提供了关于过去事务何时提交的信息。只有当 track_commit_timestamp 配置选项启用时,它们才提供有用的数据,并且仅针对启用后提交的事务。提交时间戳信息会在 vacuum 期间定期删除。
表 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 |
text |
timeline_id |
integer |
prev_timeline_id |
integer |
full_page_writes |
boolean |
next_xid |
text |
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 |
timestamp with time zone |
表 9.88. pg_control_system
输出列
列名 | 数据类型 |
---|---|
pg_control_version |
integer |
catalog_version_no |
integer |
system_identifier |
bigint |
pg_control_last_modified |
timestamp with time zone |
表 9.89. pg_control_init
输出列
列名 | 数据类型 |
---|---|
max_data_alignment |
integer |
database_block_size |
integer |
blocks_per_segment |
integer |
wal_block_size |
integer |
bytes_per_wal_segment |
integer |
max_identifier_length |
integer |
max_index_columns |
integer |
max_toast_chunk_size |
integer |
large_object_chunk_size |
integer |
float8_pass_by_value |
boolean |
data_page_checksum_version |
integer |
表 9.90. pg_control_recovery
输出列
列名 | 数据类型 |
---|---|
min_recovery_end_lsn |
pg_lsn |
min_recovery_end_timeline |
integer |
backup_start_lsn |
pg_lsn |
backup_end_lsn |
pg_lsn |
end_of_backup_record_required |
boolean |
表 9.91 中显示的函数打印版本信息。
表 9.91. 版本信息函数
函数 描述 |
---|
返回描述 PostgreSQL 服务器版本的字符串。您还可以从 server_version 获取此信息,或者对于机器可读版本,请使用 server_version_num。软件开发人员应使用 |
返回表示 PostgreSQL 使用的 Unicode 版本的字符串。 |
如果服务器在构建时支持 ICU,则返回表示 ICU 使用的 Unicode 版本的字符串;否则返回 |
表 9.92 中显示的函数打印有关 WAL 摘要状态的信息。请参见 summarize_wal。
表 9.92. WAL 摘要信息函数
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。