2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不再支持的版本: 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0

9.28. 系统管理函数 #

本节介绍的函数用于控制和监视 PostgreSQL 安装。

9.28.1. 配置设置函数 #

表 9.95 显示了用于查询和更改运行时配置参数的函数。

表 9.95. 配置设置函数

函数

描述

示例

current_setting ( setting_name text [, missing_ok boolean ] ) → text

返回设置 setting_name 的当前值。如果不存在此设置,则 current_setting 会抛出错误,除非提供了 missing_ok 并且其值为 true(在这种情况下返回 NULL)。此函数对应于SQLSHOW 命令。

current_setting('datestyle')ISO, MDY

set_config ( setting_name text, new_value text, is_local boolean ) → text

将参数 setting_name 设置为 new_value,并返回该值。如果 is_localtrue,则新值仅在当前事务中生效。如果您希望新值在当前会话的剩余时间内生效,请改用 false。此函数对应于 SQL 命令 SET

set_config 接受 NULL 值作为 new_value,但由于设置不能为 NULL,因此将其解释为重置为默认值的请求。

set_config('log_statement_stats', 'off', false)off


9.28.2. 服务器信号函数 #

表 9.96 中显示的函数向其他服务器进程发送控制信号。默认情况下,这些函数的使用仅限于超级用户,但可以通过 GRANT 将访问权限授予其他人,并附带注意事项。 Table 9.96 shows the functions available to send control signals to other server processes. Use of these functions is restricted to superusers by default but access may be granted to others using GRANT, with noted exceptions.

如果信号成功发送,则每个函数返回 true,如果发送信号失败,则返回 false

表 9.96. 服务器信号函数

函数

描述

pg_cancel_backend ( pid integer ) → boolean

取消具有指定进程 ID 的会话的当前查询。如果调用角色是正在被取消的后端所属角色的成员,或者调用角色具有 pg_signal_backend 的权限,则也允许这样做,但只有超级用户可以取消超级用户后端。作为例外,具有 pg_signal_autovacuum_worker 权限的角色可以取消自动清理工作进程,而这些工作进程通常被视为超级用户后端。

pg_log_backend_memory_contexts ( pid integer ) → boolean

请求记录指定进程 ID 的后端内存上下文。此函数可以向除日志记录器以外的后端和辅助进程发送请求。这些内存上下文将以 LOG 消息级别记录。它们将根据设置的日志配置出现在服务器日志中(有关更多信息,请参阅 Section 19.8),但无论 client_min_messages 设置如何,都不会发送给客户端。

pg_reload_conf () → boolean

使 PostgreSQL 服务器的所有进程重新加载其配置文件。(这通过向 postmaster 进程发送 SIGHUP 信号来启动,postmaster 进程再将 SIGHUP 发送给其每个子进程。)在重新加载之前,您可以使用 pg_file_settingspg_hba_file_rulespg_ident_file_mappings 视图来检查配置文件是否存在潜在错误。

pg_rotate_logfile () → boolean

指示日志文件管理器立即切换到新的输出文件。这仅在内置日志收集器运行时才有效,否则不存在日志文件管理器子进程。

pg_terminate_backend ( pid integer, timeout bigint DEFAULT 0 ) → boolean

终止具有指定进程 ID 的后端进程的会话。如果调用角色是正在被终止的后端所属角色的成员,或者调用角色具有 pg_signal_backend 的权限,则也允许这样做,但只有超级用户可以终止超级用户后端。作为例外,具有 pg_signal_autovacuum_worker 权限的角色可以终止自动清理工作进程,而这些工作进程通常被视为超级用户后端。

如果未指定 timeout 或其值为零,则无论进程是否实际终止,此函数都返回 true,仅表示发送信号成功。如果指定了 timeout(以毫秒为单位)且大于零,则函数将等待进程实际终止或直到给定的时间过去。如果进程终止,函数返回 true。超时时,会发出警告并返回 false


pg_cancel_backendpg_terminate_backend 向由进程 ID 标识的后端进程发送信号(分别为 SIGINTSIGTERM)。活动后端的进程 ID 可以从 pg_stat_activity 视图的 pid 列中找到,或者通过列出服务器上的 postgres 进程(在 Unix 上使用 ps,在 Windows 上使用 任务管理器)来找到。活动后端的角色可以从 pg_stat_activity 视图的 usename 列中找到。

pg_log_backend_memory_contexts 可用于记录后端进程的内存上下文。例如

postgres=# SELECT pg_log_backend_memory_contexts(pg_backend_pid());
 pg_log_backend_memory_contexts
--------------------------------
 t
(1 row)

将为每个内存上下文记录一条消息。例如

LOG:  logging memory contexts of PID 10377
STATEMENT:  SELECT pg_log_backend_memory_contexts(pg_backend_pid());
LOG:  level: 1; TopMemoryContext: 80800 total in 6 blocks; 14432 free (5 chunks); 66368 used
LOG:  level: 2; pgstat TabStatusArray lookup hash table: 8192 total in 1 blocks; 1408 free (0 chunks); 6784 used
LOG:  level: 2; TopTransactionContext: 8192 total in 1 blocks; 7720 free (1 chunks); 472 used
LOG:  level: 2; RowDescriptionContext: 8192 total in 1 blocks; 6880 free (0 chunks); 1312 used
LOG:  level: 2; MessageContext: 16384 total in 2 blocks; 5152 free (0 chunks); 11232 used
LOG:  level: 2; Operator class cache: 8192 total in 1 blocks; 512 free (0 chunks); 7680 used
LOG:  level: 2; smgr relation table: 16384 total in 2 blocks; 4544 free (3 chunks); 11840 used
LOG:  level: 2; TransactionAbortContext: 32768 total in 1 blocks; 32504 free (0 chunks); 264 used
...
LOG:  level: 2; ErrorContext: 8192 total in 1 blocks; 7928 free (3 chunks); 264 used
LOG:  Grand total: 1651920 bytes in 201 blocks; 622360 free (88 chunks); 1029560 used

如果同一父级下有超过 100 个子上下文,则会记录前 100 个子上下文,并附带剩余上下文的摘要。请注意,频繁调用此函数可能会带来显著的开销,因为它可能会生成大量日志消息。

9.28.3. 备份控制函数 #

表 9.97 中显示的函数有助于进行在线备份。这些函数不能在恢复期间执行(除了 pg_backup_startpg_backup_stoppg_wal_lsn_diff)。

有关这些函数的正确用法,请参阅 Section 25.3

表 9.97. 备份控制函数

函数

描述

pg_create_restore_point ( name text ) → pg_lsn

在写预日志 (WAL) 中创建一个命名的标记记录,该记录以后可用作恢复目标,并返回相应的写预日志位置。然后可以使用给定的名称与 recovery_target_name 一起指定恢复将进行到的点。避免创建具有相同名称的多个还原点,因为恢复将在第一个名称与恢复目标匹配的位置停止。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_current_wal_flush_lsn () → pg_lsn

返回当前的写预日志刷新位置(请参阅下面的注释)。

pg_current_wal_insert_lsn () → pg_lsn

返回当前的写预日志插入位置(请参阅下面的注释)。

pg_current_wal_lsn () → pg_lsn

返回当前的写预日志写入位置(请参阅下面的注释)。

pg_backup_start ( label text [, fast boolean ] ) → pg_lsn

准备服务器开始在线备份。唯一必需的参数是备份的用户自定义标签。(通常这是备份转储文件将存储的名称。)如果提供了可选的第二个参数 true,则表示以最快的速度执行 pg_backup_start。这将强制立即进行检查点,导致 I/O 操作激增,从而减慢任何并发执行的查询。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_backup_stop ( [wait_for_archive boolean ] ) → record ( lsn pg_lsn, labelfile text, spcmapfile text )

完成在线备份。备份标签文件和表空间映射文件的所需内容作为函数结果的一部分返回,并且必须写入备份区域的文件中。这些文件不得写入实时数据目录(这样做会导致 PostgreSQL 在发生崩溃时无法重新启动)。

有一个可选的 boolean 类型参数。如果为 false,则函数将在备份完成后立即返回,而不等待 WAL 被归档。此行为仅对独立监视 WAL 归档的备份软件有用。否则,备份所需的 WAL 可能丢失,使备份变得无用。默认情况下或当此参数为 true 时,pg_backup_stop 将在启用了归档的情况下等待 WAL 被归档。(在备用服务器上,这意味着它仅在 archive_mode = always 时等待。如果主服务器上的写入活动较低,则可能有用运行主服务器上的 pg_switch_wal 以触发立即的段切换。)

在主服务器上执行时,此函数还会在写预日志归档区域创建一个备份历史文件。历史文件包括传递给 pg_backup_start 的标签、备份的起始和结束写预日志位置,以及备份的起始和结束时间。记录结束位置后,当前写预日志插入点会自动前进到下一个写预日志文件,以便结束写预日志文件可以立即归档以完成备份。

函数的结果是一个记录。 lsn 列保存备份的结束写预日志位置(这可以再次忽略)。第二个列返回备份标签文件的内容,第三个列返回表空间映射文件的内容。这些必须作为备份的一部分存储,并在恢复过程中需要。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_switch_wal () → pg_lsn

强制服务器切换到新的写预日志文件,这允许当前文件被归档(假定您正在使用连续归档)。结果是刚刚完成的写预日志文件中的结束写预日志位置加 1。如果自上次写预日志切换以来没有写预日志活动,则 pg_switch_wal 不执行任何操作并返回当前使用的写预日志文件的起始位置。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_walfile_name ( lsn pg_lsn ) → text

将写预日志位置转换为包含该位置的 WAL 文件的名称。

pg_walfile_name_offset ( lsn pg_lsn ) → record ( file_name text, file_offset integer )

将写预日志位置转换为 WAL 文件名以及该文件中的字节偏移量。

pg_split_walfile_name ( file_name text ) → record ( segment_number numeric, timeline_id bigint )

从 WAL 文件名中提取序列号和时间线 ID。

pg_wal_lsn_diff ( lsn1 pg_lsn, lsn2 pg_lsn ) → numeric

计算两个写预日志位置之间的字节差(lsn1 - lsn2)。这可以与 pg_stat_replication表 9.97 中显示的某些函数结合使用,以获取复制延迟。


pg_current_wal_lsn 以与上述函数相同的格式显示当前的写预日志写入位置。类似地,pg_current_wal_insert_lsn 显示当前的写预日志插入位置,pg_current_wal_flush_lsn 显示当前的写预日志刷新位置。插入位置是任何瞬时的写预日志的 逻辑 结尾,而写入位置是已实际从服务器内部缓冲区写入的结尾,刷新位置是已写入持久存储的最后一个已知位置。写入位置是服务器外部可检查的结尾,通常是您在希望归档部分完成的写预日志文件时想要使用的。插入位置和刷新位置主要用于服务器调试目的。这些都是只读操作,不需要超级用户权限。

您可以使用 pg_walfile_name_offsetpg_lsn 值中提取相应的写预日志文件名和字节偏移量。例如

postgres=# SELECT * FROM pg_walfile_name_offset((pg_backup_stop()).lsn);
        file_name         | file_offset
--------------------------+-------------
 00000001000000000000000D |     4039624
(1 row)

类似地,pg_walfile_name 仅提取写预日志文件名。

pg_split_walfile_name 对于计算一个LSN从文件偏移量和 WAL 文件名中,例如

postgres=# \set file_name '000000010000000100C000AB'
postgres=# \set offset 256
postgres=# SELECT '0/0'::pg_lsn + pd.segment_number * ps.setting::int + :offset AS lsn
  FROM pg_split_walfile_name(:'file_name') pd,
       pg_show_all_settings() ps
  WHERE ps.name = 'wal_segment_size';
      lsn
---------------
 C001/AB000100
(1 row)

9.28.4. 恢复控制函数 #

表 9.98 中显示的函数提供有关备用服务器当前状态的信息。这些函数可以在恢复期间和正常运行时执行。

表 9.98. 恢复信息函数

函数

描述

pg_is_in_recovery () → boolean

如果恢复仍在进行中,则返回 true。

pg_last_wal_receive_lsn () → pg_lsn

返回流复制接收并同步到磁盘的最后一个写预日志位置。在流复制进行时,此值将单调递增。如果恢复已完成,则此值将保持静态,停留在恢复期间接收和同步到磁盘的最后一个 WAL 记录的位置。如果流复制已禁用或尚未开始,则该函数返回 NULL

pg_last_wal_replay_lsn () → pg_lsn

返回恢复期间重放的最后一个写预日志位置。如果恢复仍在进行中,此值将单调递增。如果恢复已完成,则此值将保持静态,停留在恢复期间应用的最后一个 WAL 记录的位置。当服务器正常启动而无需恢复时,该函数返回 NULL

pg_last_xact_replay_timestamp () → timestamp with time zone

返回恢复期间重放的最后一个事务的时间戳。这是该事务的提交或中止 WAL 记录在主服务器上生成的时间。如果恢复期间没有事务被重放,则该函数返回 NULL。否则,如果恢复仍在进行中,此值将单调递增。如果恢复已完成,则此值将保持静态,停留在恢复期间应用的最后一个事务的时间。当服务器正常启动而无需恢复时,该函数返回 NULL

pg_get_wal_resource_managers () → setof record ( rm_id integer, rm_name text, rm_builtin boolean )

返回系统中当前加载的 WAL 资源管理器。 rm_builtin 列指示它是内置资源管理器还是由扩展加载的自定义资源管理器。


表 9.99 中显示的函数控制恢复的进度。这些函数只能在恢复期间执行。

表 9.99. 恢复控制函数

函数

描述

pg_is_wal_replay_paused () → boolean

如果请求了恢复暂停,则返回 true。

pg_get_wal_replay_pause_state () → text

返回恢复暂停状态。返回值如下:如果未请求暂停,则为 not paused;如果请求了暂停但恢复尚未暂停,则为 pause requested;如果恢复实际已暂停,则为 paused

pg_promote ( wait boolean DEFAULT true, wait_seconds integer DEFAULT 60 ) → boolean

将备用服务器提升为主服务器状态。当 wait 设置为 true(默认值)时,函数将等待直到提升完成或 wait_seconds 秒过去,如果提升成功则返回 true,否则返回 false。如果 wait 设置为 false,则函数在发送 SIGUSR1 信号给 postmaster 以触发提升后立即返回 true

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_wal_replay_pause () → void

请求暂停恢复。请求并不意味着恢复立即停止。如果您想保证恢复实际已暂停,则需要检查 pg_get_wal_replay_pause_state() 返回的恢复暂停状态。注意 pg_is_wal_replay_paused() 返回是否已发出请求。恢复暂停期间,不会应用进一步的数据库更改。如果热备用处于活动状态,所有新查询都将看到相同的数据库一致快照,并且在恢复恢复之前不会生成进一步的查询冲突。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_wal_replay_resume () → void

如果恢复被暂停,则重新启动恢复。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。


pg_wal_replay_pausepg_wal_replay_resume 在提升进行期间无法执行。如果提升被触发而恢复正在暂停,则暂停状态结束,提升继续。

如果流复制被禁用,暂停状态可能会无限期地持续而不会出现问题。如果流复制正在进行,WAL 记录将继续接收,这最终会填满可用磁盘空间,具体取决于暂停时间、WAL 生成速率和可用磁盘空间。

9.28.5. 快照同步函数 #

PostgreSQL 允许数据库会话同步其快照。一个 快照 决定了使用快照的事务可以看到哪些数据。当两个或多个会话需要看到数据库中完全相同的内容时,需要同步快照。如果两个会话独立开始事务,总有可能在执行两个 START TRANSACTION 命令之间有第三个事务提交,这样其中一个会话会看到该事务的影响而另一个不会。

为了解决这个问题,PostgreSQL 允许事务 导出 它正在使用的快照。只要导出事务保持打开状态,其他事务就可以 导入 它的快照,从而保证它们看到与第一个事务完全相同的数据库视图。但请注意,这些事务中的任何一个所做的任何数据库更改对其他事务仍然是不可见的,就像未提交事务所做的更改通常那样。因此,事务在预先存在的数据方面是同步的,但在它们自己所做的更改方面则正常运行。

快照通过 pg_export_snapshot 函数导出(见 表 9.100),并通过 SET TRANSACTION 命令导入。

表 9.100. 快照同步函数

函数

描述

pg_export_snapshot () → text

保存事务的当前快照,并返回一个标识该快照的 text 字符串。此字符串必须(在数据库外部)传递给想要导入该快照的客户端。快照仅在导出它的事务结束之前可供导入。

如果需要,事务可以导出多个快照。请注意,这样做仅在 READ COMMITTED 事务中有用,因为在 REPEATABLE READ 和更高隔离级别下,事务在其整个生命周期内使用相同的快照。一旦事务导出了任何快照,就不能使用 PREPARE TRANSACTION 来准备它。

pg_log_standby_snapshot () → pg_lsn

捕获正在运行的事务的快照并将其写入 WAL,而无需等待 bgwriter 或 checkpointer 写入日志。这对于备用服务器上的逻辑解码非常有用,因为逻辑槽的创建必须等到此类记录在备用服务器上重放。


9.28.6. 复制管理函数 #

表 9.101 中显示的函数用于控制和交互复制功能。有关底层功能的信息,请参阅 Section 26.2.5Section 26.2.6Chapter 48。默认情况下,仅允许超级用户使用复制原点函数,但可以通过使用 GRANT 命令允许其他用户使用。复制槽函数仅限于超级用户和具有 REPLICATION 权限的用户。

这些函数中的许多都等效于复制协议中的命令;请参阅 Section 54.4

Section 9.28.3Section 9.28.4Section 9.28.5 中描述的函数也与复制相关。

表 9.101. 复制管理函数

函数

描述

pg_create_physical_replication_slot ( slot_name name [, immediately_reserve boolean, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

创建一个名为 slot_name 的新的物理复制槽。可选的第二个参数(当为 true 时)指定了LSN此复制槽的立即预留;否则,LSN将在流复制客户端首次连接时预留。只能使用流复制协议从物理槽流式传输更改 — 请参阅 第 54.4 节。可选的第三个参数 temporary,当设置为 true 时,指定该槽不应永久存储到磁盘,仅供当前会话使用。临时槽在任何错误发生时也会被释放。此函数对应于复制协议命令 CREATE_REPLICATION_SLOT ... PHYSICAL

pg_drop_replication_slot ( slot_name name ) → void

删除名为 slot_name 的物理或逻辑复制槽。与复制协议命令 DROP_REPLICATION_SLOT 相同。

pg_create_logical_replication_slot ( slot_name name, plugin name [, temporary boolean, twophase boolean, failover boolean ] ) → record ( slot_name name, lsn pg_lsn )

使用输出插件 plugin 创建一个名为 slot_name 的新的逻辑(解码)复制槽。可选的第三个参数 temporary,当设置为 true 时,指定该槽不应永久存储到磁盘,仅供当前会话使用。临时槽在任何错误发生时也会被释放。可选的第四个参数 twophase,当设置为 true 时,指定为该槽启用已准备事务的解码。可选的第五个参数 failover,当设置为 true 时,指定该槽已启用以同步到备用服务器,以便在故障转移后可以恢复逻辑复制。调用此函数的效果与复制协议命令 CREATE_REPLICATION_SLOT ... LOGICAL 相同。

pg_copy_physical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean ] ) → record ( slot_name name, lsn pg_lsn )

将名为 src_slot_name 的现有物理复制槽复制到名为 dst_slot_name 的物理复制槽。复制的物理槽将从与源槽相同的LSNLSN 开始预留 WAL。 temporary 是可选的。如果省略 temporary,则使用源槽的相同值。不允许复制已失效的槽。

pg_copy_logical_replication_slot ( src_slot_name name, dst_slot_name name [, temporary boolean [, plugin name ]] ) → record ( slot_name name, lsn pg_lsn )

将名为 src_slot_name 的现有逻辑复制槽复制到名为 dst_slot_name 的逻辑复制槽,并可选择更改输出插件和持久性。复制的逻辑槽将从与源逻辑槽相同的LSNLSN 开始。 temporaryplugin 都是可选的;如果省略它们,将使用源槽的值。源逻辑槽的 failover 选项不会被复制,并且默认设置为 false。这是为了避免在故障转移到正在同步槽的备用服务器时无法继续逻辑复制的风险。不允许复制已失效的槽。

pg_logical_slot_get_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

返回槽 slot_name 中的更改,从上次消耗更改的点开始。如果 upto_lsnupto_nchanges 为 NULL,则逻辑解码将一直进行到 WAL 结束。如果 upto_lsn 非 NULL,则解码将仅包括在指定 LSN 之前提交的事务。如果 upto_nchanges 非 NULL,则当解码产生的行数超过指定值时,解码将停止。但请注意,返回的实际行数可能会更多,因为此限制仅在添加解码每个新事务提交产生的行之后进行检查。如果指定的槽是逻辑故障转移槽,则该函数将不会返回,直到 synchronized_standby_slots 中指定的所有物理槽都已确认收到 WAL。

pg_logical_slot_peek_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data text )

行为与 pg_logical_slot_get_changes() 函数完全相同,除了更改不会被消耗;也就是说,它们将在将来的调用中再次返回。

pg_logical_slot_get_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

行为与 pg_logical_slot_get_changes() 函数完全相同,除了更改以 bytea 的形式返回。

pg_logical_slot_peek_binary_changes ( slot_name name, upto_lsn pg_lsn, upto_nchanges integer, VARIADIC options text[] ) → setof record ( lsn pg_lsn, xid xid, data bytea )

行为与 pg_logical_slot_peek_changes() 函数完全相同,除了更改以 bytea 的形式返回。

pg_replication_slot_advance ( slot_name name, upto_lsn pg_lsn ) → record ( slot_name name, end_lsn pg_lsn )

推进名为 slot_name 的复制槽的当前已确认位置。槽不会向后移动,也不会超出当前插入位置。返回槽的名称以及它实际推进到的位置。更新后的槽位置信息将在下一次检查点时写出(如果进行了任何推进)。因此,在发生崩溃时,槽可能会返回到较早的位置。如果指定的槽是逻辑故障转移槽,则该函数将不会返回,直到 synchronized_standby_slots 中指定的所有物理槽都已确认收到 WAL。

pg_replication_origin_create ( node_name text ) → oid

使用给定的外部名称创建复制源,并返回分配给它的内部 ID。名称的最大长度为 512 字节。

pg_replication_origin_drop ( node_name text ) → void

删除先前创建的复制源,包括任何相关的重放进度。

pg_replication_origin_oid ( node_name text ) → oid

根据名称查找复制源并返回内部 ID。如果找不到这样的复制源,则返回 NULL

pg_replication_origin_session_setup ( node_name text ) → void

将当前会话标记为从给定的源进行重放,从而允许跟踪重放进度。只能在未选择任何源时使用。使用 pg_replication_origin_session_reset 进行撤销。

pg_replication_origin_session_reset () → void

取消 pg_replication_origin_session_setup() 的效果。

pg_replication_origin_session_is_setup () → boolean

如果当前会话中已选择复制源,则返回 true。

pg_replication_origin_session_progress ( flush boolean ) → pg_lsn

返回当前会话中选择的复制源的重放位置。参数 flush 决定是否保证相应的本地事务已刷新到磁盘。

pg_replication_origin_xact_setup ( origin_lsn pg_lsn, origin_timestamp timestamp with time zone ) → void

将当前事务标记为重放一个在给定LSN时间戳提交的事务。只能在已使用 pg_replication_origin_session_setup 选择复制源时调用。

pg_replication_origin_xact_reset () → void

取消 pg_replication_origin_xact_setup() 的效果。

pg_replication_origin_advance ( node_name text, lsn pg_lsn ) → void

将给定节点的复制进度设置为给定位置。这主要用于设置初始位置,或在配置更改后设置新位置。请注意,粗心地使用此函数可能会导致数据复制不一致。

pg_replication_origin_progress ( node_name text, flush boolean ) → pg_lsn

返回给定复制源的重放位置。参数 flush 决定是否保证相应的本地事务已刷新到磁盘。

pg_logical_emit_message ( transactional boolean, prefix text, content text [, flush boolean DEFAULT false] ) → pg_lsn

pg_logical_emit_message ( transactional boolean, prefix text, content bytea [, flush boolean DEFAULT false] ) → pg_lsn

发出逻辑解码消息。这可以用来通过 WAL 将通用消息传递给逻辑解码插件。 transactional 参数指定消息是否应成为当前事务的一部分,还是应立即写入并尽快由逻辑解码器读取记录后进行解码。 prefix 参数是一个文本前缀,逻辑解码插件可以使用它来轻松识别对它们有意义的消息。 content 参数是消息的内容,可以是文本或二进制形式。 flush 参数(默认为 false)控制消息是立即刷新到 WAL 还是不刷新。 flushtransactional 没有影响,因为消息的 WAL 记录会随着事务一起刷新。

pg_sync_replication_slots () → void

将逻辑故障转移复制槽从主服务器同步到备用服务器。此函数只能在备用服务器上执行。临时的同步槽(如果存在)不能用于逻辑解码,并且必须在升级后删除。有关详细信息,请参阅 第 47.2.3 节。请注意,此函数主要用于测试和调试目的,应谨慎使用。此外,如果启用了 sync_replication_slots 并且 slotsync 工作进程已在运行以执行槽同步,则无法执行此函数。

注意

如果在执行函数后,备用服务器上的 hot_standby_feedback 被禁用,或者在 primary_slot_name 中配置的物理槽被移除,则主服务器上的 VACUUM 进程可能会删除同步槽的必要行,导致同步槽失效。


9.28.7. 数据库对象管理函数 #

表中显示的函数(表 9.102)计算数据库对象的磁盘空间使用情况,或辅助呈现或理解使用情况的结果。bigint 结果以字节为单位。如果将 OID 传递给其中一个函数,而该 OID 不代表现有对象,则返回 NULL

表 9.102. 数据库对象大小函数

函数

描述

pg_column_size ( "any" ) → integer

显示存储任何单个数据值所使用的字节数。如果直接应用于表列值,则反映了所进行的任何压缩。

pg_column_compression ( "any" ) → text

显示用于压缩单个可变长度值的压缩算法。如果值未压缩,则返回 NULL

pg_column_toast_chunk_id ( "any" ) → oid

显示已压缩到磁盘的值的 chunk_idTOAST如果值未压缩或不在磁盘上,则返回 NULLTOAST有关压缩的更多信息,请参阅 第 66.2 节TOAST.

pg_database_size ( name ) → bigint

pg_database_size ( oid ) → bigint

计算指定名称或 OID 的数据库使用的总磁盘空间。要使用此函数,您必须对指定的数据库拥有 CONNECT 权限(默认授予)或拥有 pg_read_all_stats 角色的权限。

pg_indexes_size ( regclass ) → bigint

计算附加到指定表的索引使用的总磁盘空间。

pg_relation_size ( relation regclass [, fork text ] ) → bigint

计算指定关系的一个 fork 使用的磁盘空间。(请注意,在大多数情况下,使用更高级别的函数 pg_total_relation_sizepg_table_size 更方便,它们会汇总所有 fork 的大小。)当只有一个参数时,此函数返回关系主数据 fork 的大小。第二个参数可用于指定要检查的 fork:

  • main 返回关系主数据 fork 的大小。

  • fsm 返回与关系关联的空闲空间映射(Free Space Map)的大小(请参阅 第 66.3 节)。

  • vm 返回与关系关联的可视性映射(Visibility Map)的大小(请参阅 第 66.4 节)。

  • init 返回与关系关联的初始化 fork 的大小(如果存在)。

pg_size_bytes ( text ) → bigint

将人类可读格式的大小(由 pg_size_pretty 返回)转换为字节。有效单位包括 bytesBkBMBGBTBPB

pg_size_pretty ( bigint ) → text

pg_size_pretty ( numeric ) → text

将字节大小转换为更易于人类阅读的格式,并附带大小单位(根据需要为字节、kB、MB、GB、TB 或 PB)。请注意,单位是 2 的幂而不是 10 的幂,因此 1kB 是 1024 字节,1MB 是 10242 = 1048576 字节,以此类推。

pg_table_size ( regclass ) → bigint

计算指定表使用的磁盘空间,不包括索引(但包括其 TOAST 表(如果存在)、空闲空间映射和可视化映射)。

pg_tablespace_size ( name ) → bigint

pg_tablespace_size ( oid ) → bigint

计算指定名称或 OID 的表空间使用的总磁盘空间。要使用此函数,您必须对指定的表空间拥有 CREATE 权限,或者拥有 pg_read_all_stats 角色的权限,除非它是当前数据库的默认表空间。

pg_total_relation_size ( regclass ) → bigint

计算指定表使用的总磁盘空间,包括所有索引和TOAST数据。结果等同于 pg_table_size + pg_indexes_size


上述操作表或索引的函数接受 regclass 参数,该参数只是 pg_class 系统目录中的表或索引的 OID。但是,您不必手动查找 OID,因为 regclass 数据类型的输入转换器会为您完成这项工作。有关详细信息,请参阅 第 8.19 节

表中显示的函数(表 9.103)有助于识别与数据库对象关联的特定磁盘文件。

表 9.103. 数据库对象位置函数

函数

描述

pg_relation_filenode ( relation regclass ) → oid

返回当前分配给指定关系的 filenode 号。filenode 是用于关系的(文件)名称的基本组成部分(有关更多信息,请参阅 第 66.1 节)。对于大多数关系,结果与 pg_class.relfilenode 相同,但对于某些系统目录,relfilenode 为零,此时必须使用此函数来获取正确的值。如果传递的关系没有存储(例如视图),则该函数返回 NULL。

pg_relation_filepath ( relation regclass ) → text

返回关系的完整文件路径名(相对于数据库集群的数据目录 PGDATA)。

pg_filenode_relation ( tablespace oid, filenode oid ) → regclass

给定表空间 OID 和存储它的 filenode,返回关系的 OID。这基本上是 pg_relation_filepath 的反向映射。对于数据库默认表空间中的关系,表空间可以指定为零。如果当前数据库中没有与给定值关联的关系,或者处理的是临时关系,则返回 NULL


表 9.104 列出了用于管理排序规则的函数。

表 9.104. 排序规则管理函数

函数

描述

pg_collation_actual_version ( oid ) → text

返回排序规则对象在操作系统中当前安装的实际版本。如果此版本与 pg_collation.collversion 中的值不同,则依赖于该排序对象的对象可能需要重建。另请参阅 ALTER COLLATION

pg_database_collation_actual_version ( oid ) → text

返回数据库排序规则在操作系统中当前安装的实际版本。如果此版本与 pg_database.datcollversion 中的值不同,则依赖于该排序规则的对象可能需要重建。另请参阅 ALTER DATABASE

pg_import_system_collations ( schema regnamespace ) → integer

基于操作系统中找到的所有区域设置,将排序规则添加到系统目录 pg_collation 中。这是 initdb 使用的;有关更多详细信息,请参阅 第 23.2.2 节。如果稍后在操作系统中安装了其他区域设置,则可以再次运行此函数以添加新区域设置的排序规则。与 pg_collation 中的现有条目匹配的区域设置将被跳过。(但此函数不会删除基于不再存在于操作系统中的区域设置的排序规则对象。) schema 参数通常是 pg_catalog,但这并非强制要求;排序规则也可以安装到其他模式中。该函数返回它创建的新排序规则对象的数量。此函数的使用仅限于超级用户。


表 9.105 列出了用于操作统计信息的函数。这些函数不能在恢复期间执行。

警告

对这些统计信息操作函数所做的更改很可能被 autovacuum(或手动 VACUUMANALYZE)覆盖,应视为临时性的。

表 9.105. 数据库对象统计信息操作函数

函数

描述

pg_restore_relation_stats ( VARIADIC kwargs "any" ) → boolean

更新表级统计信息。通常,这些统计信息会在 VACUUMANALYZE 中自动收集或更新,因此无需调用此函数。但是,在恢复后,如果尚未运行 ANALYZE,则此函数有助于优化器选择更好的计划。

跟踪的统计信息可能因版本而异,因此参数以 argnameargvalue 对的形式传递,格式为

SELECT pg_restore_relation_stats(
    'arg1name', 'arg1value'::arg1type,
    'arg2name', 'arg2value'::arg2type,
    'arg3name', 'arg3value'::arg3type);

例如,要为表 mytable 设置 relpagesreltuples

SELECT pg_restore_relation_stats(
    'schemaname', 'myschema',
    'relname',    'mytable',
    'relpages',   173::integer,
    'reltuples',  10000::real);

参数 schemanamerelname 是必需的,用于指定表。其他参数是与 pg_class 中某些列对应的统计信息的名称和值。当前支持的关系统计信息包括 relpages(类型为 integer)、reltuples(类型为 real)、relallvisible(类型为 integer)和 relallfrozen(类型为 integer)。

此外,此函数接受参数名称 version,类型为 integer,指定统计信息来源的服务器版本。这有望有助于将统计信息从旧版本的 PostgreSQL 移植。

次要错误将报告为 WARNING 并被忽略,其余统计信息仍将被恢复。如果所有指定的统计信息都成功恢复,则返回 true,否则返回 false

调用者必须拥有表上的 MAINTAIN 权限,或者拥有数据库的所有权。

pg_clear_relation_stats ( schemaname text, relname text ) → void

清除给定关系的表级统计信息,就像表是新创建的一样。

调用者必须拥有表上的 MAINTAIN 权限,或者拥有数据库的所有权。

pg_restore_attribute_stats ( VARIADIC kwargs "any" ) → boolean

创建或更新列级统计信息。通常,这些统计信息会在 VACUUMANALYZE 中自动收集或更新,因此无需调用此函数。但是,在恢复后,如果尚未运行 ANALYZE,则此函数有助于优化器选择更好的计划。

跟踪的统计信息可能因版本而异,因此参数以 argnameargvalue 对的形式传递,格式为

SELECT pg_restore_attribute_stats(
    'arg1name', 'arg1value'::arg1type,
    'arg2name', 'arg2value'::arg2type,
    'arg3name', 'arg3value'::arg3type);

例如,要为表 mytable 的属性 col1 设置 avg_widthnull_frac

SELECT pg_restore_attribute_stats(
    'schemaname', 'myschema',
    'relname',    'mytable',
    'attname',    'col1',
    'inherited',  false,
    'avg_width',  125::integer,
    'null_frac',  0.5::real);

必需的参数是 schemanamerelname(类型为 text),用于指定表;attname(类型为 text)或 attnum(类型为 smallint),用于指定列;以及 inherited,用于指定统计信息是否包含子表的值。其他参数是与 pg_stats 中的列对应的统计信息的名称和值。

此外,此函数接受参数名称 version,类型为 integer,指定统计信息来源的服务器版本。这有望有助于将统计信息从旧版本的 PostgreSQL 移植。

次要错误将报告为 WARNING 并被忽略,其余统计信息仍将被恢复。如果所有指定的统计信息都成功恢复,则返回 true,否则返回 false

调用者必须拥有表上的 MAINTAIN 权限,或者拥有数据库的所有权。

pg_clear_attribute_stats ( schemaname text, relname text, attname text, inherited boolean ) → void

清除给定关系和属性的列级统计信息,就像表是新创建的一样。

调用者必须拥有表上的 MAINTAIN 权限,或者拥有数据库的所有权。


表 9.106 列出了提供分区表结构信息的函数。

表 9.106. 分区信息函数

函数

描述

pg_partition_tree ( regclass ) → setof record ( relid regclass, parentrelid regclass, isleaf boolean, level integer )

列出给定分区表或分区索引的分区树中的表或索引,每个分区一行。提供的信息包括分区的 OID、其直接父级的 OID、一个指示分区是否为叶分区的布尔值,以及一个表示其在层级结构中级别的整数。级别值为 0 表示输入表或索引,1 表示其直接子分区,2 表示它们的子分区,依此类推。如果关系不存在或不是分区表或分区索引,则不返回任何行。

pg_partition_ancestors ( regclass ) → setof regclass

列出给定分区的祖先关系,包括关系本身。如果关系不存在或不是分区表或分区索引,则不返回任何行。

pg_partition_root ( regclass ) → regclass

返回给定关系所属的分区树的最顶层父级。如果关系不存在或不是分区表或分区索引,则返回 NULL


例如,要检查分区表 measurement 中包含的数据的总大小,可以使用以下查询

SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size
  FROM pg_partition_tree('measurement');

9.28.8. 索引维护函数 #

表 9.107 显示了可用于索引维护任务的函数。(请注意,这些维护任务通常由 autovacuum 自动完成;只有在特殊情况下才需要使用这些函数。)这些函数不能在恢复期间执行。这些函数的用法仅限于超级用户和给定索引的所有者。

表 9.107. 索引维护函数

函数

描述

brin_summarize_new_values ( index regclass ) → integer

扫描指定的 BRIN 索引以查找基表中的页面范围,这些页面范围当前未被索引摘要;对于任何此类范围,它通过扫描这些表页面来创建一个新的摘要索引元组。返回插入到索引中的新页面范围摘要的数量。

brin_summarize_range ( index regclass, blockNumber bigint ) → integer

如果尚未摘要,则摘要覆盖给定块的页面范围。这类似于 brin_summarize_new_values,但它仅处理覆盖给定表块号的页面范围。

brin_desummarize_range ( index regclass, blockNumber bigint ) → void

如果存在,则删除摘要覆盖给定表块的页面范围的 BRIN 索引元组。

gin_clean_pending_list ( index regclass ) → bigint

通过将指定 GIN 索引的“待处理”列表中的条目批量移动到主 GIN 数据结构来清理它。返回从待处理列表中移除的页面数。如果参数是使用 fastupdate 选项禁用的 GIN 索引,则不会发生清理,并且结果为零,因为索引没有待处理列表。有关待处理列表和 fastupdate 选项的详细信息,请参阅第 65.4.4.1 节第 65.4.5 节


9.28.9. 通用文件访问函数 #

表 9.108 中显示的函数提供了对托管服务器的机器上的文件的本机访问。除非用户是超级用户或被授予 pg_read_server_files 角色,否则只能访问数据库集群目录和 log_directory 内的文件。对于集群目录中的文件,请使用相对路径;对于日志文件,请使用与 log_directory 配置设置匹配的路径。

请注意,授予用户对 pg_read_file() 或相关函数的 EXECUTE 权限,允许他们读取数据库服务器进程可以读取的服务器上的任何文件;这些函数会绕过所有数据库内的权限检查。这意味着,例如,具有此类访问权限的用户可以读取存储身份验证信息的 pg_authid 表的内容,以及读取数据库中的任何表数据。因此,应仔细考虑授予对这些函数的访问权限。

在授予这些函数的权限时,请注意,显示可选参数的表条目大多实现为具有不同参数列表的多个物理函数。如果需要使用,则必须分别授予对每个此类函数的权限。psql\df 命令可以帮助检查实际的函数签名。

其中一些函数接受一个可选的 missing_ok 参数,该参数指定文件或目录不存在时的行为。如果为 true,则函数将返回 NULL 或适当的空结果集。如果为 false,则会引发错误。(任何其他非“文件未找到”的失败条件都会被报告为错误。)默认值为 false

表 9.108. 通用文件访问函数

函数

描述

pg_ls_dir ( dirname text [, missing_ok boolean, include_dot_dirs boolean ] ) → setof text

返回指定目录中的所有文件(以及目录和其他特殊文件)的名称。include_dot_dirs 参数指示是否将“.”和“..”包含在结果集中;默认是排除它们。当 missing_oktrue 时,包含它们可能有助于区分空目录和不存在的目录。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_ls_logdir () → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器日志目录中每个普通文件的名称、大小和最后修改时间(mtime)。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_waldir () → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器写前日志 (WAL) 目录中每个普通文件的名称、大小和最后修改时间(mtime)。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_logicalmapdir () → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器 pg_logical/mappings 目录中每个普通文件的名称、大小和最后修改时间(mtime)。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_logicalsnapdir () → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器 pg_logical/snapshots 目录中每个普通文件的名称、大小和最后修改时间(mtime)。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_replslotdir ( slot_name text ) → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器 pg_replslot/slot_name 目录中每个普通文件的名称、大小和最后修改时间(mtime),其中 slot_name 是作为函数输入提供的复制槽的名称。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_summariesdir () → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器的 WAL 摘要目录(pg_wal/summaries)中每个普通文件的名称、大小和最后修改时间(mtime)。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_archive_statusdir () → setof record ( name text, size bigint, modification timestamp with time zone )

返回服务器的 WAL 归档状态目录(pg_wal/archive_status)中每个普通文件的名称、大小和最后修改时间(mtime)。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_ls_tmpdir ( [ tablespace oid ] ) → setof record ( name text, size bigint, modification timestamp with time zone )

返回指定 tablespace 的临时文件目录中每个普通文件的名称、大小和最后修改时间(mtime)。如果未提供 tablespace,则检查 pg_default 表空间。以点开头的文件名、目录和其他特殊文件将被排除。

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

pg_read_file ( filename text [, offset bigint, length bigint ] [, missing_ok boolean ] ) → text

从给定字节 offset 开始,返回文本文件全部或部分内容,最多返回 length 字节(如果先到达文件末尾则返回更少)。如果 offset 为负数,则相对于文件末尾。如果省略 offsetlength,则返回整个文件。从文件中读取的字节被解释为数据库编码的字符串;如果它们在该编码中无效,则会引发错误。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

pg_read_binary_file ( filename text [, offset bigint, length bigint ] [, missing_ok boolean ] ) → bytea

返回文件全部或部分内容。此函数与 pg_read_file 相同,只是它可以读取任意二进制数据,并将结果作为 bytea 而不是 text 返回;因此,不会执行编码检查。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。

结合 convert_from 函数,此函数可用于以指定编码读取文本文件并将其转换为数据库编码。

SELECT convert_from(pg_read_binary_file('file_in_utf8.txt'), 'UTF8');

pg_stat_file ( filename text [, missing_ok boolean ] ) → record ( size bigint, access timestamp with time zone, modification timestamp with time zone, change timestamp with time zone, creation timestamp with time zone, isdir boolean )

返回一个记录,其中包含文件大小、上次访问时间戳、上次修改时间戳、上次文件状态更改时间戳(仅限 Unix 平台)、文件创建时间戳(仅限 Windows)以及指示其是否为目录的标志。

默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。


9.28.10. 劝告性锁函数 #

表 9.109 中显示的函数用于管理劝告性锁。有关这些函数的正确使用方法的详细信息,请参阅第 13.3.5 节

所有这些函数都旨在用于锁定应用程序定义的资源,这些资源可以通过单个 64 位键值或两个 32 位键值来标识(请注意,这两个键空间不重叠)。如果另一个会话已经持有同一资源标识符上的冲突锁,则这些函数将根据函数的适用性,要么等待资源可用,要么返回 false 结果。锁可以是共享的或排他的:共享锁与同一资源上的其他共享锁不冲突,只与排他锁冲突。锁可以是会话级别的(因此它们会一直持有到释放或会话结束),也可以是事务级别的(因此它们会一直持有到当前事务结束;没有手动释放的机制)。多个会话级锁请求会堆叠,因此如果同一资源标识符被锁定三次,则必须有三个解锁请求才能在会话结束前释放该资源。

表 9.109. 劝告性锁函数

函数

描述

pg_advisory_lock ( key bigint ) → void

pg_advisory_lock ( key1 integer, key2 integer ) → void

获取排他的会话级劝告性锁,必要时等待。

pg_advisory_lock_shared ( key bigint ) → void

pg_advisory_lock_shared ( key1 integer, key2 integer ) → void

获取共享的会话级劝告性锁,必要时等待。

pg_advisory_unlock ( key bigint ) → boolean

pg_advisory_unlock ( key1 integer, key2 integer ) → boolean

释放先前获取的排他会话级劝告性锁。如果锁成功释放,则返回 true。如果未持有锁,则返回 false,并且服务器会报告 SQL 警告。

pg_advisory_unlock_all () → void

释放当前会话持有的所有会话级劝告性锁。(即使客户端异常断开连接,该函数也会在会话结束时隐式调用。)

pg_advisory_unlock_shared ( key bigint ) → boolean

pg_advisory_unlock_shared ( key1 integer, key2 integer ) → boolean

释放先前获取的共享会话级劝告性锁。如果锁成功释放,则返回 true。如果未持有锁,则返回 false,并且服务器会报告 SQL 警告。

pg_advisory_xact_lock ( key bigint ) → void

pg_advisory_xact_lock ( key1 integer, key2 integer ) → void

获取排他的事务级劝告性锁,必要时等待。

pg_advisory_xact_lock_shared ( key bigint ) → void

pg_advisory_xact_lock_shared ( key1 integer, key2 integer ) → void

获取共享的事务级劝告性锁,必要时等待。

pg_try_advisory_lock ( key bigint ) → boolean

pg_try_advisory_lock ( key1 integer, key2 integer ) → boolean

如果可用,则获取排他的会话级劝告性锁。它将立即获取锁并返回 true,或者在无法立即获取锁时返回 false 而不等待。

pg_try_advisory_lock_shared ( key bigint ) → boolean

pg_try_advisory_lock_shared ( key1 integer, key2 integer ) → boolean

如果可用,则获取共享的会话级劝告性锁。它将立即获取锁并返回 true,或者在无法立即获取锁时返回 false 而不等待。

pg_try_advisory_xact_lock ( key bigint ) → boolean

pg_try_advisory_xact_lock ( key1 integer, key2 integer ) → boolean

如果可用,则获取排他的事务级劝告性锁。它将立即获取锁并返回 true,或者在无法立即获取锁时返回 false 而不等待。

pg_try_advisory_xact_lock_shared ( key bigint ) → boolean

pg_try_advisory_xact_lock_shared ( key1 integer, key2 integer ) → boolean

如果可用,则获取共享的事务级劝告性锁。它将立即获取锁并返回 true,或者在无法立即获取锁时返回 false 而不等待。


提交更正

如果您在文档中看到任何不正确、与您对特定功能的使用经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。