Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17 / 18

9.27. 系统信息函数和运算符 #

9.27.1. 会话信息函数
9.27.2. 访问权限查询函数
9.27.3. Schema 可见性查询函数
9.27.4. 系统目录信息函数
9.27.5. 对象信息和寻址函数
9.27.6. 注释信息函数
9.27.7. 数据有效性检查函数
9.27.8. 事务 ID 和快照信息函数
9.27.9. 已提交事务信息函数
9.27.10. 控制数据函数
9.27.11. 版本信息函数
9.27.12. WAL 摘要信息函数

本节描述的函数用于获取有关 PostgreSQL 安装的各种信息。

9.27.1. 会话信息函数 #

表 9.71 显示了几个用于提取会话和系统信息的函数。

除了本节列出的函数外,还有许多与统计系统相关的函数也提供系统信息。有关更多信息,请参阅 第 27.2.26 节

表 9.71. 会话信息函数

函数

描述

current_catalogname

current_database () → name

返回当前数据库的名称。(SQL 标准中,数据库称为“目录”(catalogs),因此 current_catalog 是标准的拼写。)

current_query () → text

返回当前正在执行的查询文本,如客户端提交的(可能包含多个语句)。

current_rolename

这等同于 current_user

current_schemaname

current_schema () → name

返回当前搜索路径中的第一个 schema 的名称(如果搜索路径为空,则返回 NULL)。这是在创建对象时不指定目标 schema 时使用的 schema。

current_schemas ( include_implicit boolean ) → name[]

返回当前有效搜索路径中的所有 schema 名称的数组,按优先级顺序排列。(search_path 设置中不对应现有、可搜索 schema 的项将被忽略。)如果布尔参数为 true,则结果中会包含隐式搜索的系统 schema,如 pg_catalog

current_username

返回当前执行上下文的用户名称。

inet_client_addr () → inet

返回当前客户端的 IP 地址,如果当前连接是通过 Unix 域套接字进行的,则返回 NULL

inet_client_port () → integer

返回当前客户端的 IP 端口号,如果当前连接是通过 Unix 域套接字进行的,则返回 NULL

inet_server_addr () → inet

返回服务器接受当前连接的 IP 地址,如果当前连接是通过 Unix 域套接字进行的,则返回 NULL

inet_server_port () → integer

返回服务器接受当前连接的 IP 端口号,如果当前连接是通过 Unix 域套接字进行的,则返回 NULL

pg_backend_pid () → integer

返回连接到当前会话的服务器进程的进程 ID。

pg_blocking_pids ( integer ) → integer[]

返回阻止具有指定进程 ID 的服务器进程获取锁的会话的进程 ID 数组,如果不存在此类服务器进程或其未被阻止,则返回空数组。

一个服务器进程阻止另一个进程,是因为它持有与被阻止进程的锁请求冲突的锁(硬阻塞),或者它正在等待一个与被阻止进程的锁请求冲突的锁,并且在等待队列中排在被阻止进程前面(软阻塞)。使用并行查询时,结果总是列出客户端可见的进程 ID(即 pg_backend_pid 的结果),即使实际的锁是由子工作进程持有或等待的。因此,结果中可能包含重复的 PID。另请注意,当准备好的事务持有冲突锁时,它将表示为进程 ID 为零。

频繁调用此函数可能会对数据库性能产生一定影响,因为它需要短时间内独占访问锁管理器共享状态。

pg_conf_load_time () → timestamp with time zone

返回服务器配置文件最后加载的时间。如果当前会话在加载时处于活动状态,这将是会话本身重新读取配置文件的时间(因此在不同会话中读取时间会略有不同)。否则,它是 postmaster 进程重新读取配置文件的时间。

pg_current_logfile ( [ text ] ) → text

返回当前由日志收集器使用的日志文件的路径名。路径包含 log_directory 目录和单个日志文件名。如果日志收集器被禁用,则返回 NULL。当存在多个日志文件,每个文件格式不同时,不带参数的 pg_current_logfile 返回在有序列表中找到的第一个格式的文件的路径:stderrcsvlogjsonlog。如果没有任何日志文件具有这些格式,则返回 NULL。要请求特定日志文件格式的信息,请将 csvlogjsonlogstderr 作为可选参数的值提供。如果请求的日志格式未在 log_destination 中配置,则返回 NULL。结果反映了 current_logfiles 文件的内容。

默认情况下,此函数仅限于超级用户和具有 pg_monitor 角色特权的角色使用,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_get_loaded_modules () → setof record ( module_name text, version text, file_name text )

返回当前服务器会话中已加载的可加载模块列表。module_nameversion 字段在模块作者未使用 PG_MODULE_MAGIC_EXT 宏提供值时为 NULL。file_name 字段提供模块(共享库)的文件名。

pg_my_temp_schema () → oid

返回当前会话的临时 schema 的 OID,如果没有(因为它没有创建任何临时表)则返回零。

pg_is_other_temp_schema ( oid ) → boolean

如果给定的 OID 是另一个会话的临时 schema 的 OID,则返回 true。(例如,这对于从目录显示中排除其他会话的临时表很有用。)

pg_jit_available () → boolean

如果一个JIT编译器扩展可用(请参阅 第 30 章)并且 jit 配置参数设置为 on,则返回 true。

pg_numa_available () → boolean

如果服务器已编译支持NUMA支持,则返回 true。

pg_listening_channels () → setof text

返回当前会话正在监听的异步通知通道名称的集合。

pg_notification_queue_usage () → double precision

返回异步通知队列当前占用的最大队列大小的比例(0-1)。有关更多信息,请参阅 LISTENNOTIFY

pg_postmaster_start_time () → timestamp with time zone

返回服务器启动的时间。

pg_safe_snapshot_blocking_pids ( integer ) → integer[]

返回阻止具有指定进程 ID 的服务器进程获取安全快照的会话的进程 ID 数组,如果不存在此类服务器进程或其未被阻止,则返回空数组。

运行 SERIALIZABLE 事务的会话会阻止 SERIALIZABLE READ ONLY DEFERRABLE 事务获取快照,直到后者确定避免获取任何谓词锁是安全的。有关 serializable 和 deferrable 事务的更多信息,请参阅 第 13.2.3 节

频繁调用此函数可能会对数据库性能产生一定影响,因为它需要短时间内访问谓词锁管理器共享状态。

pg_trigger_depth () → integer

返回当前 PostgreSQL 触发器的嵌套级别(如果不是直接或间接从触发器内部调用,则为 0)。

session_username

返回会话用户的名称。

system_usertext

返回用户在身份验证周期中提交的身份验证方法和身份(如果有),然后才被分配数据库角色。它表示为 auth_method:identityNULL(如果用户尚未通过身份验证,例如使用了 Trust 身份验证)。

username

这等同于 current_user


注意

current_catalog, current_role, current_schema, current_user, session_user, and userSQL中具有特殊的语法地位:它们必须在没有尾随括号的情况下调用。在 PostgreSQL 中,current_schema 可以选择性地使用括号,但其他函数则不行。

通常,session_user 是启动当前数据库连接的用户;但超级用户可以使用 SET SESSION AUTHORIZATION 更改此设置。current_user 是适用于权限检查的用户标识。通常它等于会话用户,但可以使用 SET ROLE 更改。在执行具有 SECURITY DEFINER 属性的函数期间,它也会发生变化。在 Unix 术语中,会话用户是“真实用户”(real user),当前用户是“有效用户”(effective user)。current_role and usercurrent_user 的同义词。(SQL 标准在 current_rolecurrent_user 之间进行了区分,但 PostgreSQL 没有,因为它将用户和角色统一为一种实体。)

9.27.2. 访问权限查询函数 #

表 9.72 列出了允许以编程方式查询对象访问权限的函数。(有关权限的更多信息,请参阅 第 5.8 节。)在这些函数中,要查询权限的用户可以通过名称或 OID(pg_authid.oid)指定;如果名称为 public,则检查 PUBLIC 伪角色的权限。此外,user 参数可以完全省略,在这种情况下假定为 current_user。要查询的对象也可以通过名称或 OID 指定。按名称指定时,如果相关,则可以包含 schema 名称。感兴趣的访问权限由文本字符串指定,该字符串必须求值为对象类型的适当权限关键字之一(例如 SELECT)。可选地,可以在权限类型后面添加 WITH GRANT OPTION 来测试是否拥有授予选项。此外,多个权限类型可以以逗号分隔,在这种情况下,如果列出的任何权限被持有,则结果为 true。(权限字符串的大小写不敏感,并且允许在权限名称之间有额外的空格,但在名称内部不允许。)一些示例

SELECT has_table_privilege('myschema.mytable', 'select');
SELECT has_table_privilege('joe', 'mytable', 'INSERT, SELECT WITH GRANT OPTION');

表 9.72. 访问权限查询函数

函数

描述

has_any_column_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

用户是否对表的任何列拥有权限?如果用户对整个表拥有权限,或者至少有一列具有列级别的权限授予,则此函数成功。允许的权限类型为 SELECT, INSERT, UPDATE, and REFERENCES

has_column_privilege ( [ user name or oid, ] table text or oid, column text or smallint, privilege text ) → boolean

用户是否对指定的表列拥有权限?如果用户对整个表拥有权限,或者该列具有列级别的权限授予,则此函数成功。列可以通过名称或属性编号(pg_attribute.attnum)指定。允许的权限类型为 SELECT, INSERT, UPDATE, and REFERENCES

has_database_privilege ( [ user name or oid, ] database text or oid, privilege text ) → boolean

用户是否对数据库拥有权限?允许的权限类型为 CREATE, CONNECT, TEMPORARY, and TEMP(等同于 TEMPORARY)。

has_foreign_data_wrapper_privilege ( [ user name or oid, ] fdw text or oid, privilege text ) → boolean

用户是否对外部数据包装器拥有权限?唯一允许的权限类型是 USAGE

has_function_privilege ( [ user name or oid, ] function text or oid, privilege text ) → boolean

用户是否对函数拥有权限?唯一允许的权限类型是 EXECUTE

通过名称而非 OID 指定函数时,允许的输入与 regprocedure 数据类型相同(请参阅 第 8.19 节)。例如:

SELECT has_function_privilege('joeuser', 'myfunc(int, text)', 'execute');

has_language_privilege ( [ user name or oid, ] language text or oid, privilege text ) → boolean

用户是否对语言拥有权限?唯一允许的权限类型是 USAGE

has_largeobject_privilege ( [ user name or oid, ] largeobject oid, privilege text ) → boolean

用户是否对大型对象拥有权限?允许的权限类型为 SELECT and UPDATE

has_parameter_privilege ( [ user name or oid, ] parameter text, privilege text ) → boolean

用户是否对配置参数拥有权限?参数名称不区分大小写。允许的权限类型为 SET and ALTER SYSTEM

has_schema_privilege ( [ user name or oid, ] schema text or oid, privilege text ) → boolean

用户是否对 schema 拥有权限?允许的权限类型为 CREATE and USAGE

has_sequence_privilege ( [ user name or oid, ] sequence text or oid, privilege text ) → boolean

用户是否对序列拥有权限?允许的权限类型为 USAGE, SELECT, and UPDATE

has_server_privilege ( [ user name or oid, ] server text or oid, privilege text ) → boolean

用户是否对外部服务器拥有权限?唯一允许的权限类型是 USAGE

has_table_privilege ( [ user name or oid, ] table text or oid, privilege text ) → boolean

用户是否对表拥有权限?允许的权限类型为 SELECT, INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER, and MAINTAIN

has_tablespace_privilege ( [ user name or oid, ] tablespace text or oid, privilege text ) → boolean

用户是否对表空间拥有权限?唯一允许的权限类型是 CREATE

has_type_privilege ( [ user name or oid, ] type text or oid, privilege text ) → boolean

用户是否对数据类型拥有权限?唯一允许的权限类型是 USAGE。通过名称而非 OID 指定类型时,允许的输入与 regtype 数据类型相同(请参阅 第 8.19 节)。

pg_has_role ( [ user name or oid, ] role text or oid, privilege text ) → boolean

用户是否对角色拥有权限?允许的权限类型为 MEMBER, USAGE, and SETMEMBER 表示直接或间接成员身份,不考虑授予了哪些具体权限。USAGE 表示角色权限是否可以立即使用,无需执行 SET ROLE,而 SET 表示是否可以使用 SET ROLE 命令切换到该角色。WITH ADMIN OPTION or WITH GRANT OPTION 可以添加到任何这些权限类型后面,以测试是否拥有 ADMIN 权限(所有六种拼写测试的是同一个东西)。此函数不允许设置 userpublic 的特殊情况,因为 PUBLIC 伪角色永远不能是真实角色的成员。

row_security_active ( table text or oid ) → boolean

在当前用户和当前环境的上下文中,指定表的行级安全性是否处于活动状态?


表 9.73 显示了 aclitem 类型可用的运算符,它是访问权限的目录表示。有关如何读取访问权限值的信息,请参阅 第 5.8 节

表 9.73. aclitem 运算符

运算符

描述

示例

aclitem = aclitemboolean

aclitems 相等吗?(请注意,aclitem 类型缺少常规的比较运算符集;它只有相等性。反过来,aclitem 数组只能进行相等性比较。)

'calvin=r*w/hobbes'::aclitem = 'calvin=r*w*/hobbes'::aclitemf

aclitem[] @> aclitemboolean

数组是否包含指定的权限?(如果存在一个数组条目匹配 aclitem 的授权者和授予者,并且至少拥有指定的权限集,则为 true。)

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] @> 'calvin=r*/hobbes'::aclitemt

aclitem[] ~ aclitemboolean

这是 @> 的已弃用别名。

'{calvin=r*w/hobbes,hobbes=r*w*/postgres}'::aclitem[] ~ 'calvin=r*/hobbes'::aclitemt


表 9.74 显示了一些用于管理 aclitem 类型的其他函数。

表 9.74. aclitem 函数

函数

描述

acldefault ( type "char", ownerId oid ) → aclitem[]

构造一个 aclitem 数组,其中包含属于 OID 为 ownerId 的角色的 type 类型对象的默认访问权限。这代表当对象的ACL条目为 NULL 时所使用的访问权限。(默认访问权限在 第 5.8 节 中进行了描述。)type 参数必须是以下之一:“c”表示 COLUMN,“r”表示 TABLE 和类表对象,“s”表示 SEQUENCE,“d”表示 DATABASE,“f”表示 FUNCTIONPROCEDURE,“l”表示 LANGUAGE,“L”表示 LARGE OBJECT,“n”表示 SCHEMA,“p”表示 PARAMETER,“t”表示 TABLESPACE,“F”表示 FOREIGN DATA WRAPPER,“S”表示 FOREIGN SERVER,或“T”表示 TYPEDOMAIN

aclexplode ( aclitem[] ) → setof record ( grantor oid, grantee oid, privilege_type text, is_grantable boolean )

aclitem 数组分解为行集。如果授权对象是 PUBLIC 伪角色,则在 grantee 列中表示为零。每个授予的权限都表示为单独的行,如 SELECT, INSERT 等(请参阅 表 5.1 查看完整列表)。请注意,每个权限都分解为单独的行,因此 privilege_type 列中只有一个关键字。

makeaclitem ( grantee oid, grantor oid, privileges text, is_grantable boolean ) → aclitem

使用给定的属性构造一个 aclitemprivileges 是一个逗号分隔的权限名称列表,例如 SELECT, INSERT 等,所有这些都将在结果中设置。(权限字符串的大小写不敏感,并且允许在权限名称之间有额外的空格,但在名称内部不允许。)


9.27.3. Schema 可见性查询函数 #

表 9.75 显示了确定某个对象在当前 schema 搜索路径中是否“可见”的函数。例如,如果一个表所在的 schema 在搜索路径中,并且没有同名表出现在搜索路径的前面,则该表被认为是可见的。这等同于该表可以不加 schema 限定地按名称引用。因此,要列出所有可见表的名称

SELECT relname FROM pg_class WHERE pg_table_is_visible(oid);

对于函数和运算符,搜索路径中的一个对象如果名称(以及参数数据类型)在前一个对象出现之前,则被认为是可见的。对于运算符类和运算符族,将同时考虑名称和关联的索引访问方法。

表 9.75. Schema 可见性查询函数

函数

描述

pg_collation_is_visible ( collation oid ) → boolean

collation 在搜索路径中是否可见?

pg_conversion_is_visible ( conversion oid ) → boolean

conversion 在搜索路径中是否可见?

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_statistics_obj_is_visible ( stat 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

类型(或域)在搜索路径中是否可见?


所有这些函数都需要对象的 OID 来识别要检查的对象。如果要通过名称测试对象,使用 OID 别名类型(regclass, regtype, regprocedure, regoperator, regconfig, or regdictionary)会很方便,例如:

SELECT pg_type_is_visible('myschema.widget'::regtype);

请注意,通过这种方式测试非 schema 限定的类型名称没有太大意义——如果名称可以识别,它就必须是可见的。

9.27.4. 系统目录信息函数 #

表 9.76 列出了从系统目录中提取信息的函数。

表 9.76. 系统目录信息函数

函数

描述

format_type ( type oid, typemod integer ) → text

返回由类型 OID 和可能的类型修饰符标识的数据类型的 SQL 名称。如果不知道特定的类型修饰符,则将类型修饰符传递为 NULL。

pg_basetype ( regtype ) → regtype

返回由其类型 OID 标识的域的基础类型的 OID。如果参数是而非域类型的 OID,则按原样返回参数。如果参数不是有效的类型 OID,则返回 NULL。如果存在域依赖链,它将递归查找直到找到基础类型。

假设 CREATE DOMAIN mytext AS text

pg_basetype('mytext'::regtype)text

pg_char_to_encoding ( encoding name ) → integer

将提供的编码名称转换为整数,该整数表示某些系统目录表中使用的内部标识符。如果提供了未知编码名称,则返回 -1

pg_encoding_to_char ( encoding integer ) → name

将某些系统目录表中用作编码内部标识符的整数转换为人类可读的字符串。如果提供了无效的编码号,则返回空字符串。

pg_get_catalog_foreign_keys () → setof record ( fktable regclass, fkcols text[], pktable regclass, pkcols text[], is_array boolean, is_opt boolean )

返回描述 PostgreSQL 系统目录中存在的外键关系的记录集。fktable 列包含引用目录的名称,fkcols 列包含引用列的名称。类似地,pktable 列包含被引用目录的名称,pkcols 列包含被引用列的名称。如果 is_array 为 true,则最后一个引用列是一个数组,其每个元素都应匹配被引用目录中的某个条目。如果 is_opt 为 true,则引用列(们)允许包含零而不是有效引用。

pg_get_constraintdef ( constraint oid [, pretty boolean ] ) → text

重新构造约束的创建命令。(这是反编译的重构,而不是原始命令文本。)

pg_get_expr ( expr pg_node_tree, relation oid [, pretty boolean ] ) → text

反编译存储在系统目录中的表达式的内部形式,例如列的默认值。如果表达式可能包含 Vars,请将它们引用的关系 OID 作为第二个参数指定;如果不预期存在 Vars,则传递零就足够了。

pg_get_functiondef ( func oid ) → text

重新构造函数或过程的创建命令。(这是反编译的重构,而不是原始命令文本。)结果是一个完整的 CREATE OR REPLACE FUNCTIONCREATE OR REPLACE PROCEDURE 语句。

pg_get_function_arguments ( func oid ) → text

以在 CREATE FUNCTION 中需要出现的格式(包括默认值)重新构造函数或过程的参数列表。

pg_get_function_identity_arguments ( func oid ) → text

以在 ALTER FUNCTION 等命令中需要出现的格式,重新构造用于标识函数或过程的参数列表。此格式省略了默认值。

pg_get_function_result ( func oid ) → text

以在 CREATE FUNCTION 中需要出现的格式,重新构造函数的 RETURNS 子句。对于过程返回 NULL

pg_get_indexdef ( index oid [, column integer, pretty boolean ] ) → text

重新构造索引的创建命令。(这是反编译的重构,而不是原始命令文本。)如果提供了 column 并且不为零,则仅重构该列的定义。

pg_get_keywords () → setof record ( word text, catcode "char", barelabel boolean, catdesc text, baredesc text )

返回描述服务器识别的 SQL 关键字的记录集。word 列包含关键字。catcode 列包含一个类别代码:“U”表示未保留关键字,“C”表示可以是列名的关键字,“T”表示可以是类型或函数名称的关键字,或“R”表示完全保留的关键字。barelabel 列为 true(如果关键字可以用作 SELECT 列表中的“裸”列标签),或 false(如果它只能在 AS 之后使用)。catdesc 列包含描述关键字类别的可能本地化的字符串。baredesc 列包含描述关键字列标签状态的可能本地化的字符串。

pg_get_partkeydef ( table oid ) → text

CREATE TABLEPARTITION BY 子句中的格式,重新构造分区表的定义。(这是反编译的重构,而不是原始命令文本。)

pg_get_ruledef ( rule oid [, pretty boolean ] ) → text

重新构造规则的创建命令。(这是反编译的重构,而不是原始命令文本。)

pg_get_serial_sequence ( table text, column text ) → text

返回与列关联的序列的名称,如果该列没有关联序列,则返回 NULL。如果该列是标识列,则关联的序列是为该列内部创建的序列。对于使用 serial 类型(serial, smallserial, bigserial)创建的列,它是为该 serial 列定义创建的序列。在后一种情况下,可以通过 ALTER SEQUENCE OWNED BY 修改或删除关联。 (此函数可能应该命名为 pg_get_owned_sequence;其当前名称反映了它历史上用于 serial 类型列的事实。)第一个参数是带可选 schema 的表名,第二个参数是列名。因为第一个参数可能同时包含 schema 和表名,所以它会按常规的 SQL 规则解析,这意味着默认情况下会被转为小写。第二个参数仅作为列名,按字面处理,因此保留其大小写。结果已格式化,可用于传递给序列函数(请参阅 第 9.17 节)。

典型用法是在读取标识列或 serial 列的序列的当前值时,例如:

SELECT currval(pg_get_serial_sequence('sometable', 'id'));

pg_get_statisticsobjdef ( statobj oid ) → text

重新构造扩展统计对象的创建命令。(这是反编译的重构,而不是原始命令文本。)

pg_get_triggerdef ( trigger oid [, pretty boolean ] ) → text

重新构造触发器的创建命令。(这是反编译的重构,而不是原始命令文本。)

pg_get_userbyid ( role oid ) → name

根据角色的 OID 返回其名称。

pg_get_viewdef ( view oid [, pretty boolean ] ) → text

重新构造视图或物化视图的底层 SELECT 命令。(这是反编译的重构,而不是原始命令文本。)

pg_get_viewdef ( view oid, wrap_column integer ) → text

重新构造视图或物化视图的底层 SELECT 命令。(这是反编译的重构,而不是原始命令文本。)在此函数形式中,始终启用漂亮打印,并且长行将被换行,以尝试使它们比指定的列数短。

pg_get_viewdef ( view text [, pretty boolean ] ) → text

从视图的文本名称(而不是其 OID)重新构造视图或物化视图的底层 SELECT 命令。(这已弃用;请改用 OID 变体。)

pg_index_column_has_property ( index regclass, column integer, property text ) → boolean

测试索引列是否具有指定的属性。表 9.77 中列出了常见的索引列属性。(请注意,扩展访问方法可以为其索引定义其他属性名称。)如果属性名称未知或不适用于特定对象,或者 OID 或列号未标识有效对象,则返回 NULL

pg_index_has_property ( index regclass, property text ) → boolean

测试索引是否具有指定的属性。表 9.78 中列出了常见的索引属性。(请注意,扩展访问方法可以为其索引定义其他属性名称。)如果属性名称未知或不适用于特定对象,或者 OID 未标识有效对象,则返回 NULL

pg_indexam_has_property ( am oid, property text ) → boolean

测试索引访问方法是否具有指定的属性。访问方法属性列在 表 9.79 中。如果属性名称未知或不适用于特定对象,或者 OID 未标识有效对象,则返回 NULL

pg_options_to_table ( options_array text[] ) → setof record ( option_name text, option_value text )

返回 pg_class.reloptionspg_attribute.attoptions 的值所表示的存储选项集。

pg_settings_get_flags ( guc text ) → text[]

返回与给定 GUC 关联的标志数组,如果 GUC 不存在则返回 NULL。如果 GUC 存在但没有要显示的标志,则结果为空数组。仅公开 表 9.80 中列出的最有用标志。

pg_tablespace_databases ( tablespace oid ) → setof oid

返回将对象存储在指定表空间中的数据库的 OID 集合。如果此函数返回任何行,则表空间不为空,不能被删除。要识别填充表空间的特定对象,您需要连接到 pg_tablespace_databases 标识的数据库并查询其 pg_class 目录。

pg_tablespace_location ( tablespace oid ) → text

返回此表空间所在的文件系统路径。

pg_typeof ( "any" ) → regtype

返回传递给它的值的 OID 数据类型。这对于故障排除或动态构建 SQL 查询可能很有帮助。该函数被声明为返回 regtype,它是一个 OID 别名类型(请参阅 第 8.19 节);这意味着它与 OID 在比较目的上相同,但在显示时显示为类型名称。

pg_typeof(33)integer

COLLATION FOR ( "any" ) → text

返回传递给它的值的 collation 名称。值将被引用并根据需要添加 schema 限定。如果参数表达式没有推导出 collation,则返回 NULL。如果参数不是可 collation 的数据类型,则会引发错误。

collation for ('foo'::text)"default"

collation for ('foo' COLLATE "de_DE")"de_DE"

to_regclass ( text ) → regclass

将文本关系名称转换为其 OID。将字符串转换为 regclass 类型会获得类似的结果(请参阅 第 8.19 节);但是,如果找不到名称,此函数将返回 NULL 而不是抛出错误。

to_regcollation ( text ) → regcollation

将文本 collation 名称转换为其 OID。将字符串转换为 regcollation 类型会获得类似的结果(请参阅 第 8.19 节);但是,如果找不到名称,此函数将返回 NULL 而不是抛出错误。

to_regnamespace ( text ) → regnamespace

将文本模式名称转换为其 OID。通过将字符串强制转换为 regnamespace 类型(参见 第 8.19 节)可获得类似的结果;但是,如果找不到名称,此函数将返回 NULL 而不是抛出错误。

to_regoper ( text ) → regoper

将文本运算符名称转换为其 OID。通过将字符串强制转换为 regoper 类型(参见 第 8.19 节)可获得类似的结果;但是,如果找不到名称或名称不明确,此函数将返回 NULL 而不是抛出错误。

to_regoperator ( text ) → regoperator

将带参数类型的文本运算符名称转换为其 OID。通过将字符串强制转换为 regoperator 类型(参见 第 8.19 节)可获得类似的结果;但是,如果找不到名称,此函数将返回 NULL 而不是抛出错误。

to_regproc ( text ) → regproc

将文本函数或过程名称转换为其 OID。通过将字符串强制转换为 regproc 类型(参见 第 8.19 节)可获得类似的结果;但是,如果找不到名称或名称不明确,此函数将返回 NULL 而不是抛出错误。

to_regprocedure ( text ) → regprocedure

将带参数的文本函数或过程名称转换为其 OID。通过将字符串强制转换为 regprocedure 类型(参见 第 8.19 节)可获得类似的结果;但是,如果找不到名称,此函数将返回 NULL 而不是抛出错误。

to_regrole ( text ) → regrole

将文本角色名称转换为其 OID。通过将字符串强制转换为 regrole 类型(参见 第 8.19 节)可获得类似的结果;但是,如果找不到名称,此函数将返回 NULL 而不是抛出错误。

to_regtype ( text ) → regtype

解析文本字符串,从中提取潜在的类型名称,并将其转换为类型 OID。字符串中的语法错误将导致错误;但如果字符串是一个语法上有效的类型名称,但在目录中未找到,则结果为 NULL。通过将字符串强制转换为 regtype 类型(参见 第 8.19 节)可获得类似的结果,只是该类型在找不到名称时会抛出错误。

to_regtypemod ( text ) → integer

解析文本字符串,从中提取潜在的类型名称,并转换其类型修饰符(如果存在)。字符串中的语法错误将导致错误;但如果字符串是一个语法上有效的类型名称,但在目录中未找到,则结果为 NULL。如果没有类型修饰符,结果为 -1

to_regtypemod 可与 to_regtype 结合使用,为 format_type 生成适当的输入,从而规范化表示类型名称的字符串。

format_type(to_regtype('varchar(32)'), to_regtypemod('varchar(32)'))character varying(32)


大多数用于重构(反编译)数据库对象的函数都包含一个可选的 pretty 标志,如果该标志为 true,则结果会被“美化打印”。美化打印会抑制不必要的括号并添加空格以提高可读性。美化打印格式更具可读性,但默认格式在未来版本的 PostgreSQL 中更有可能被以相同方式解释;因此,请避免将美化打印的输出用于转储目的。将 false 传递给 pretty 参数会产生与省略该参数相同的结果。

表 9.77. 索引列属性

名称 描述
asc 在正向扫描时,列是否按升序排序?
desc 在正向扫描时,列是否按降序排序?
nulls_first 在正向扫描时,列是否将 NULL 值排在前面?
nulls_last 在正向扫描时,列是否将 NULL 值排在后面?
orderable 列是否具有任何已定义的排序顺序?
distance_orderable 列是否可以通过“距离”运算符(例如 ORDER BY col <-> constant)按顺序扫描?
returnable 列值是否可以通过仅索引扫描返回?
search_array 列是否原生支持 col = ANY(array) 搜索?
search_nulls 列是否支持 IS NULLIS NOT NULL 搜索?

表 9.78. 索引属性

名称 描述
clusterable 索引是否可以用于 CLUSTER 命令?
index_scan 索引是否支持普通(非位图)扫描?
bitmap_scan 索引是否支持位图扫描?
backward_scan 扫描方向是否可以在扫描中途改变(以支持光标上的 FETCH BACKWARD 而无需物化)?

表 9.79. 索引访问方法属性

名称 描述
can_order 访问方法是否支持 CREATE INDEX 中的 ASCDESC 和相关关键字?
can_unique 访问方法是否支持唯一索引?
can_multi_col 访问方法是否支持多列索引?
can_exclude 访问方法是否支持排除约束?
can_include 访问方法是否支持 CREATE INDEXINCLUDE 子句?

表 9.80. GUC 标志

Flag 描述
EXPLAIN 带有此标志的参数包含在 EXPLAIN (SETTINGS) 命令中。
NO_SHOW_ALL 带有此标志的参数不包含在 SHOW ALL 命令中。
NO_RESET 带有此标志的参数不支持 RESET 命令。
NO_RESET_ALL 带有此标志的参数不包含在 RESET ALL 命令中。
NOT_IN_SAMPLE 默认情况下,带有此标志的参数不包含在 postgresql.conf 中。
RUNTIME_COMPUTED 带有此标志的参数是运行时计算的参数。

9.27.5. 对象信息和寻址函数 #

表 9.81 列出了与数据库对象标识和寻址相关的函数。

表 9.81. 对象信息和寻址函数

函数

描述

pg_get_acl ( classid oid, objid oid, objsubid integer ) → aclitem[]

返回ACL数据库对象的,由目录 OID、对象 OID 和子对象 ID 指定。对于未定义的,此函数返回 NULL 值。

pg_describe_object ( classid oid, objid oid, objsubid integer ) → text

返回数据库对象的文本描述,由目录 OID、对象 OID 和子对象 ID(例如表中的列号;当引用整个对象时,子对象 ID 为零)标识。此描述旨在供人类阅读,并且可能根据服务器配置进行翻译。这对于确定 pg_depend 目录中引用的对象的身份特别有用。对于未定义的,此函数返回 NULL 值。

pg_identify_object ( classid oid, objid oid, objsubid integer ) → record ( type text, schema text, name text, identity text )

返回一个包含足够信息以唯一标识由目录 OID、对象 OID 和子对象 ID 指定的数据库对象的行。此信息旨在供机器读取,并且绝不会被翻译。type 标识数据库对象的类型;schema 是对象所属的模式名称,或对于不属于模式的对象类型为 NULLname 是对象的名称,必要时进行引用,如果名称(以及相关的模式名称)足以唯一标识对象,则为该名称,否则为 NULLidentity 是完整的对象标识,其确切格式取决于对象类型,并且格式中的每个名称都会根据需要进行模式限定和引用。未定义的对象会用 NULL 值标识。

pg_identify_object_as_address ( classid oid, objid oid, objsubid integer ) → record ( type text, object_names text[], object_args text[] )

返回一个包含足够信息以唯一标识由目录 OID、对象 OID 和子对象 ID 指定的数据库对象的行。返回的信息独立于当前服务器,即,它可以用于标识另一台服务器上同名的对象。type 标识数据库对象的类型;object_namesobject_args 是文本数组,它们一起构成对对象的引用。这三个值可以传递给 pg_get_object_address 以获取对象的内部地址。

pg_get_object_address ( type text, object_names text[], object_args text[] ) → record ( classid oid, objid oid, objsubid integer )

返回一个包含足够信息以唯一标识由类型代码和对象名称/参数数组指定的数据库对象的行。返回的值将用于系统目录(如 pg_depend)中;它们可以传递给其他系统函数,如 pg_describe_objectpg_identify_objectclassid 是包含对象的系统目录的 OID;objid 是对象本身的 OID,objsubid 是子对象 ID,如果没有则为零。此函数是 pg_identify_object_as_address 的反函数。未定义的对象会用 NULL 值标识。


pg_get_acl 对于检索和检查与数据库对象关联的权限很有用,无需查看特定目录。例如,要检索当前数据库中所有对象的已授予权限

postgres=# SELECT
    (pg_identify_object(s.classid,s.objid,s.objsubid)).*,
    pg_catalog.pg_get_acl(s.classid,s.objid,s.objsubid) AS acl
FROM pg_catalog.pg_shdepend AS s
JOIN pg_catalog.pg_database AS d
    ON d.datname = current_database() AND
       d.oid = s.dbid
JOIN pg_catalog.pg_authid AS a
    ON a.oid = s.refobjid AND
       s.refclassid = 'pg_authid'::regclass
WHERE s.deptype = 'a';
-[ RECORD 1 ]-----------------------------------------
type     | table
schema   | public
name     | testtab
identity | public.testtab
acl      | {postgres=arwdDxtm/postgres,foo=r/postgres}

9.27.6. 注释信息函数 #

表 9.82. 注释信息函数 中显示的函数用于提取使用 COMMENT 命令之前存储的注释。如果找不到指定参数的注释,则返回 null 值。

表 9.82. 注释信息函数

函数

描述

col_description ( table oid, column integer ) → text

返回表列的注释,由其表的 OID 和列号指定。(obj_description 不能用于表列,因为列没有自己的 OID。)

obj_description ( object oid, catalog name ) → text

返回由其 OID 和包含它的系统目录名称指定的数据库对象的注释。例如,obj_description(123456, 'pg_class') 将检索 OID 为 123456 的表的注释。

obj_description ( object oid ) → text

仅由其 OID 指定的数据库对象的注释。这已弃用,因为无法保证 OID 在不同系统目录之间是唯一的;因此,可能会返回错误的注释。

shobj_description ( object oid, catalog name ) → text

返回由其 OID 和包含它的系统目录名称指定的共享数据库对象的注释。这与 obj_description 相同,只是它用于检索共享对象的注释(即数据库、角色和表空间)。一些系统目录对于每个集群内的所有数据库都是全局的,并且其中对象的描述也是全局存储的。


9.27.7. 数据有效性检查函数 #

表 9.83. 数据有效性检查函数 中显示的函数有助于检查建议输入数据的有效性。

表 9.83. 数据有效性检查函数

函数

描述

示例

pg_input_is_valid ( string text, type text ) → boolean

测试给定 string 是否是指定数据类型的有效输入,返回 true 或 false。

只有当数据类型的输入函数已更新为将无效输入报告为“软”错误时,此函数才能按预期工作。否则,无效输入将中止事务,就像字符串直接强制转换为该类型一样。

pg_input_is_valid('42', 'integer')t

pg_input_is_valid('42000000000', 'integer')f

pg_input_is_valid('1234.567', 'numeric(7,4)')f

pg_input_error_info ( string text, type text ) → record ( message text, detail text, hint text, sql_error_code text )

测试给定 string 是否是指定数据类型的有效输入;如果不是,则返回将抛出的错误的详细信息。如果输入有效,则结果为 NULL。输入与 pg_input_is_valid 相同。

只有当数据类型的输入函数已更新为将无效输入报告为“软”错误时,此函数才能按预期工作。否则,无效输入将中止事务,就像字符串直接强制转换为该类型一样。

SELECT * FROM pg_input_error_info('42000000000', 'integer')

                       message                        | detail | hint | sql_error_code
------------------------------------------------------+--------+------+----------------
 value "42000000000" is out of range for type integer |        |      | 22003

9.27.8. 事务 ID 和快照信息函数 #

表 9.84. 事务 ID 和快照信息函数 中显示的函数以可导出格式提供服务器事务信息。这些函数的主要用途是确定在两个快照之间提交了哪些事务。

表 9.84. 事务 ID 和快照信息函数

函数

描述

age ( xid ) → integer

返回提供的事务 ID 与当前事务计数器之间的事务数。

mxid_age ( xid ) → integer

返回提供的多事务 ID 与当前多事务计数器之间的多事务 ID 数。

pg_current_xact_id () → xid8

返回当前事务的 ID。如果当前事务尚无 ID(因为它尚未执行任何数据库更新),它将分配一个新的 ID;有关详细信息,请参阅 第 67.1 节。如果在子事务中执行,这将返回顶层事务 ID;有关详细信息,请参阅 第 67.3 节

pg_current_xact_id_if_assigned () → xid8

返回当前事务的 ID,如果尚未分配 ID,则返回 NULL。(如果事务可能是只读的,最好使用此变体,以避免不必要地消耗 XID。)如果在子事务中执行,这将返回顶层事务 ID。

pg_xact_status ( xid8 ) → text

报告最近一次事务的提交状态。结果是 in progresscommittedaborted 之一,前提是该事务足够近,以至于系统保留了该事务的提交状态。如果它足够旧,以至于系统中不再存在对该事务的引用并且已丢弃了提交状态信息,则结果为 NULL。应用程序可能会使用此函数,例如,用于确定在 COMMIT 进行中时应用程序和数据库服务器断开连接后,其事务是提交还是中止。请注意,准备好的事务会报告为 in progress;如果应用程序需要确定事务 ID 是否属于准备好的事务,则必须检查 pg_prepared_xacts

pg_current_snapshot () → pg_snapshot

返回当前快照,这是一个显示哪些事务 ID 当前正在进行的的数据结构。快照仅包含顶层事务 ID;不显示子事务 ID;有关详细信息,请参阅 第 67.3 节

pg_snapshot_xip ( pg_snapshot ) → setof xid8

返回快照中包含的正在进行的事务 ID 集合。

pg_snapshot_xmax ( pg_snapshot ) → xid8

返回快照的 xmax

pg_snapshot_xmin ( pg_snapshot ) → xid8

返回快照的 xmin

pg_visible_in_snapshot ( xid8, pg_snapshot ) → boolean

给定的事务 ID 是否根据此快照可见(即,它是在快照拍摄之前完成的)?请注意,此函数对于子事务 ID(subxid)不会给出正确答案;有关详细信息,请参阅 第 67.3 节

pg_get_multixact_members ( multixid xid ) → setof record ( xid xid, mode text )

返回指定多事务 ID 的每个成员的事务 ID 和锁定模式。锁定模式 forupdfornokeyupdshkeysh 分别对应于行级锁 FOR UPDATEFOR NO KEY UPDATEFOR SHAREFOR KEY SHARE,如 第 13.3.2 节中所述。另外两种模式是多事务特有的:nokeyupd,用于不修改键列的更新;以及 upd,用于修改键列的更新或删除。


内部事务 ID 类型 xid 是 32 位宽,每 40 亿次事务回绕一次。但是,表 9.84. 事务 ID 和快照信息函数 中显示的函数(agemxid_agepg_get_multixact_members 除外)使用 64 位类型 xid8,该类型在安装生命周期内不会回绕,如果需要,可以转换为 xid 类型;有关详细信息,请参阅 第 67.1 节pg_snapshot 数据类型存储有关特定时间点事务 ID 可见性的信息。其组件在表 9.85. 快照组件 中描述。pg_snapshot 的文本表示为 xmin:xmax:xip_list。例如 10:20:10,14,15 表示 xmin=10, xmax=20, xip_list=10, 14, 15

表 9.85. 快照组件

名称 描述
xmin 最低仍然活跃的事务 ID。所有小于 xmin 的事务 ID 要么已提交并可见,要么已回滚并死掉。
xmax 最高已完成事务 ID 的下一个 ID。在快照拍摄时,所有大于或等于 xmax 的事务 ID 都尚未完成,因此是不可见的。
xip_list 快照拍摄时正在进行的事务。事务 ID xmin <= X < xmax 且不在此列表中的事务在快照拍摄时已完成,因此根据其提交状态可见或死掉。此列表不包含子事务(subxids)的事务 ID。

在 13 版之前的 PostgreSQL 版本中,没有 xid8 类型,因此提供了使用 bigint 来表示 64 位 XID 的函数的变体,并且具有相应的不同快照数据类型 txid_snapshot。这些旧函数名称中包含 txid。它们仍然为了向后兼容而支持,但可能会在未来版本中被移除。请参阅 表 9.86

表 9.86. 已弃用的事务 ID 和快照信息函数

函数

描述

txid_current () → bigint

参见 pg_current_xact_id()

txid_current_if_assigned () → bigint

参见 pg_current_xact_id_if_assigned()

txid_current_snapshot () → txid_snapshot

参见 pg_current_snapshot()

txid_snapshot_xip ( txid_snapshot ) → setof bigint

参见 pg_snapshot_xip()

txid_snapshot_xmax ( txid_snapshot ) → bigint

参见 pg_snapshot_xmax()

txid_snapshot_xmin ( txid_snapshot ) → bigint

参见 pg_snapshot_xmin()

txid_visible_in_snapshot ( bigint, txid_snapshot ) → boolean

参见 pg_visible_in_snapshot()

txid_status ( bigint ) → text

参见 pg_xact_status()


9.27.9. 已提交事务信息函数 #

表 9.87. 已提交事务信息函数 中显示的函数提供有关过去事务提交时间的信息。只有当 track_commit_timestamp 配置选项启用且仅对启用后提交的事务有用时,它们才提供有用数据。通常会在 vacuum 过程中删除提交时间戳信息。

表 9.87. 已提交事务信息函数

函数

描述

pg_xact_commit_timestamp ( xid ) → timestamp with time zone

返回事务的提交时间戳。

pg_xact_commit_timestamp_origin ( xid ) → record ( timestamp timestamp with time zone, roident oid)

返回事务的提交时间戳和复制源。

pg_last_committed_xact () → record ( xid xid, timestamp timestamp with time zone, roident oid )

返回最新已提交事务的事务 ID、提交时间戳和复制源。


9.27.10. 控制数据函数 #

表 9.88. 控制数据函数 中显示的函数会打印在 initdb 期间初始化的信息,例如目录版本。它们还显示有关预写日志和检查点处理的信息。这些信息是集群范围的,不特定于任何单个数据库。这些函数提供与 pg_controldata 应用程序相同的信息,来自同一源。

表 9.88. 控制数据函数

函数

描述

pg_control_checkpoint () → record

返回有关当前检查点状态的信息,如 表 9.89. pg_control_checkpoint 输出列 中所示。

pg_control_system () → record

返回有关当前控制文件状态的信息,如 表 9.90. pg_control_system 输出列 中所示。

pg_control_init () → record

返回有关集群初始化状态的信息,如 表 9.91. pg_control_init 输出列 中所示。

pg_control_recovery () → record

返回有关恢复状态的信息,如 表 9.92. pg_control_recovery 输出列 中所示。


表 9.89. pg_control_checkpoint 输出列

Column Name Data Type
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.90. pg_control_system 输出列

Column Name Data Type
pg_control_version integer
catalog_version_no integer
system_identifier bigint
pg_control_last_modified timestamp with time zone

表 9.91. pg_control_init 输出列

Column Name Data Type
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
default_char_signedness boolean

表 9.92. pg_control_recovery 输出列

Column Name Data Type
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.27.11. 版本信息函数 #

表 9.93. 版本信息函数 中显示的函数会打印版本信息。

表 9.93. 版本信息函数

函数

描述

version () → text

返回描述 PostgreSQL 服务器版本的字符串。您还可以从 server_version 获取此信息,或者为了获得机器可读的版本,请使用 server_version_num。软件开发人员应使用 server_version_num(自 8.2 起可用)或 PQserverVersion 而不是解析文本版本。

unicode_version () → text

返回表示 PostgreSQL 使用的 Unicode 版本的字符串。

icu_unicode_version () → text

如果服务器使用 ICU 构建,则返回表示 ICU 使用的 Unicode 版本的字符串;否则返回 NULL


9.27.12. WAL 摘要信息函数 #

表 9.94. WAL 摘要信息函数 中显示的函数会打印有关 WAL 摘要状态的信息。请参阅 summarize_wal

表 9.94. WAL 摘要信息函数

函数

描述

pg_available_wal_summaries () → setof record ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn )

返回数据目录中 pg_wal/summaries 下存在的 WAL 摘要文件的信息。每个 WAL 摘要文件将返回一行。每个文件都在指定的 LSN 范围内对指定 TLI 的 WAL 进行摘要。此函数可能有助于确定服务器上是否存在足够的 WAL 摘要,以便基于已知起始 LSN 的某个先前备份进行增量备份。

pg_wal_summary_contents ( tli bigint, start_lsn pg_lsn, end_lsn pg_lsn ) → setof record ( relfilenode oid, reltablespace oid, reldatabase oid, relforknumber smallint, relblocknumber bigint, is_limit_block boolean )

返回有关由 TLI 和起始/结束 LSN 标识的单个 WAL 摘要文件内容的信息。每行 is_limit_block 为 false 的行表示由其余输出列标识的块在该文件摘要的记录范围内被至少一条 WAL 记录修改过。每行 is_limit_block 为 true 的行表示(a)在相关的 WAL 记录范围内,关系分叉被截断为 relblocknumber 给定的长度,或者(b)关系分叉在相关的 WAL 记录范围内被创建或删除;在这种情况下,relblocknumber 将为零。

pg_get_wal_summarizer_state () → record ( summarized_tli bigint, summarized_lsn pg_lsn, pending_lsn pg_lsn, summarizer_pid int )

返回有关 WAL 摘要器进度的信息。如果 WAL 摘要器自实例启动以来从未运行过,则 summarized_tlisummarized_lsn 分别为 00/0;否则,它们将是写入磁盘的最后一个 WAL 摘要文件的 TLI 和结束 LSN。如果 WAL 摘要器当前正在运行,pending_lsn 将是它已消费的最后一条记录的结束 LSN,该 LSN 必须始终大于或等于 summarized_lsn;如果 WAL 摘要器未运行,它将等于 summarized_lsnsummarizer_pid 是 WAL 摘要器进程的 PID(如果正在运行),否则为 NULL。

作为特殊例外,WAL 摘要器将拒绝在 wal_level=minimal 下生成的 WAL 上运行以生成 WAL 摘要文件,因为此类摘要可能不安全,无法作为增量备份的基础。在这种情况下,上述字段将继续像正在生成摘要一样前进,但不会将任何内容写入磁盘。一旦摘要器达到在 wal_level 设置为 replica 或更高时生成的 WAL,它将恢复将摘要写入磁盘。