本节介绍的函数用于控制和监视 PostgreSQL 安装。
表 9.95 显示了用于查询和更改运行时配置参数的函数。
表 9.95. 配置设置函数
函数 描述 示例 |
---|
返回设置
|
将参数
|
表 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. 服务器信号函数
函数 描述 |
---|
取消具有指定进程 ID 的会话的当前查询。如果调用角色是正在被取消的后端所属角色的成员,或者调用角色具有 |
请求记录指定进程 ID 的后端内存上下文。此函数可以向除日志记录器以外的后端和辅助进程发送请求。这些内存上下文将以 |
使 PostgreSQL 服务器的所有进程重新加载其配置文件。(这通过向 postmaster 进程发送 SIGHUP 信号来启动,postmaster 进程再将 SIGHUP 发送给其每个子进程。)在重新加载之前,您可以使用 |
指示日志文件管理器立即切换到新的输出文件。这仅在内置日志收集器运行时才有效,否则不存在日志文件管理器子进程。 |
终止具有指定进程 ID 的后端进程的会话。如果调用角色是正在被终止的后端所属角色的成员,或者调用角色具有 如果未指定 |
pg_cancel_backend
和 pg_terminate_backend
向由进程 ID 标识的后端进程发送信号(分别为 SIGINT 或 SIGTERM)。活动后端的进程 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.97 中显示的函数有助于进行在线备份。这些函数不能在恢复期间执行(除了 pg_backup_start
、pg_backup_stop
和 pg_wal_lsn_diff
)。
有关这些函数的正确用法,请参阅 Section 25.3。
表 9.97. 备份控制函数
函数 描述 |
---|
在写预日志 (WAL) 中创建一个命名的标记记录,该记录以后可用作恢复目标,并返回相应的写预日志位置。然后可以使用给定的名称与 recovery_target_name 一起指定恢复将进行到的点。避免创建具有相同名称的多个还原点,因为恢复将在第一个名称与恢复目标匹配的位置停止。 默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。 |
返回当前的写预日志刷新位置(请参阅下面的注释)。 |
返回当前的写预日志插入位置(请参阅下面的注释)。 |
返回当前的写预日志写入位置(请参阅下面的注释)。 |
准备服务器开始在线备份。唯一必需的参数是备份的用户自定义标签。(通常这是备份转储文件将存储的名称。)如果提供了可选的第二个参数 默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。 |
完成在线备份。备份标签文件和表空间映射文件的所需内容作为函数结果的一部分返回,并且必须写入备份区域的文件中。这些文件不得写入实时数据目录(这样做会导致 PostgreSQL 在发生崩溃时无法重新启动)。 有一个可选的 在主服务器上执行时,此函数还会在写预日志归档区域创建一个备份历史文件。历史文件包括传递给 函数的结果是一个记录。 默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。 |
强制服务器切换到新的写预日志文件,这允许当前文件被归档(假定您正在使用连续归档)。结果是刚刚完成的写预日志文件中的结束写预日志位置加 1。如果自上次写预日志切换以来没有写预日志活动,则 默认情况下,此函数限制为超级用户,但可以授予其他用户 EXECUTE 权限来运行该函数。 |
将写预日志位置转换为包含该位置的 WAL 文件的名称。 |
将写预日志位置转换为 WAL 文件名以及该文件中的字节偏移量。 |
从 WAL 文件名中提取序列号和时间线 ID。 |
计算两个写预日志位置之间的字节差( |
pg_current_wal_lsn
以与上述函数相同的格式显示当前的写预日志写入位置。类似地,pg_current_wal_insert_lsn
显示当前的写预日志插入位置,pg_current_wal_flush_lsn
显示当前的写预日志刷新位置。插入位置是任何瞬时的写预日志的 “逻辑” 结尾,而写入位置是已实际从服务器内部缓冲区写入的结尾,刷新位置是已写入持久存储的最后一个已知位置。写入位置是服务器外部可检查的结尾,通常是您在希望归档部分完成的写预日志文件时想要使用的。插入位置和刷新位置主要用于服务器调试目的。这些都是只读操作,不需要超级用户权限。
您可以使用 pg_walfile_name_offset
从 pg_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.98 中显示的函数提供有关备用服务器当前状态的信息。这些函数可以在恢复期间和正常运行时执行。
表 9.98. 恢复信息函数
表 9.99 中显示的函数控制恢复的进度。这些函数只能在恢复期间执行。
表 9.99. 恢复控制函数
pg_wal_replay_pause
和 pg_wal_replay_resume
在提升进行期间无法执行。如果提升被触发而恢复正在暂停,则暂停状态结束,提升继续。
如果流复制被禁用,暂停状态可能会无限期地持续而不会出现问题。如果流复制正在进行,WAL 记录将继续接收,这最终会填满可用磁盘空间,具体取决于暂停时间、WAL 生成速率和可用磁盘空间。
PostgreSQL 允许数据库会话同步其快照。一个 快照 决定了使用快照的事务可以看到哪些数据。当两个或多个会话需要看到数据库中完全相同的内容时,需要同步快照。如果两个会话独立开始事务,总有可能在执行两个 START TRANSACTION
命令之间有第三个事务提交,这样其中一个会话会看到该事务的影响而另一个不会。
为了解决这个问题,PostgreSQL 允许事务 导出 它正在使用的快照。只要导出事务保持打开状态,其他事务就可以 导入 它的快照,从而保证它们看到与第一个事务完全相同的数据库视图。但请注意,这些事务中的任何一个所做的任何数据库更改对其他事务仍然是不可见的,就像未提交事务所做的更改通常那样。因此,事务在预先存在的数据方面是同步的,但在它们自己所做的更改方面则正常运行。
快照通过 pg_export_snapshot
函数导出(见 表 9.100),并通过 SET TRANSACTION 命令导入。
表 9.100. 快照同步函数
函数 描述 |
---|
保存事务的当前快照,并返回一个标识该快照的 如果需要,事务可以导出多个快照。请注意,这样做仅在 |
捕获正在运行的事务的快照并将其写入 WAL,而无需等待 bgwriter 或 checkpointer 写入日志。这对于备用服务器上的逻辑解码非常有用,因为逻辑槽的创建必须等到此类记录在备用服务器上重放。 |
表 9.101 中显示的函数用于控制和交互复制功能。有关底层功能的信息,请参阅 Section 26.2.5、Section 26.2.6 和 Chapter 48。默认情况下,仅允许超级用户使用复制原点函数,但可以通过使用 GRANT
命令允许其他用户使用。复制槽函数仅限于超级用户和具有 REPLICATION
权限的用户。
这些函数中的许多都等效于复制协议中的命令;请参阅 Section 54.4。
Section 9.28.3、Section 9.28.4 和 Section 9.28.5 中描述的函数也与复制相关。
表 9.101. 复制管理函数
函数 描述 |
---|
创建一个名为 |
删除名为 |
使用输出插件 |
将名为 |
将名为 |
返回槽 |
行为与 |
行为与 |
行为与 |
推进名为 |
使用给定的外部名称创建复制源,并返回分配给它的内部 ID。名称的最大长度为 512 字节。 |
删除先前创建的复制源,包括任何相关的重放进度。 |
根据名称查找复制源并返回内部 ID。如果找不到这样的复制源,则返回 |
将当前会话标记为从给定的源进行重放,从而允许跟踪重放进度。只能在未选择任何源时使用。使用 |
取消 |
如果当前会话中已选择复制源,则返回 true。 |
返回当前会话中选择的复制源的重放位置。参数 |
将当前事务标记为重放一个在给定LSN时间戳提交的事务。只能在已使用 |
取消 |
将给定节点的复制进度设置为给定位置。这主要用于设置初始位置,或在配置更改后设置新位置。请注意,粗心地使用此函数可能会导致数据复制不一致。 |
返回给定复制源的重放位置。参数 |
发出逻辑解码消息。这可以用来通过 WAL 将通用消息传递给逻辑解码插件。 |
将逻辑故障转移复制槽从主服务器同步到备用服务器。此函数只能在备用服务器上执行。临时的同步槽(如果存在)不能用于逻辑解码,并且必须在升级后删除。有关详细信息,请参阅 第 47.2.3 节。请注意,此函数主要用于测试和调试目的,应谨慎使用。此外,如果启用了 注意如果在执行函数后,备用服务器上的 |
表中显示的函数(表 9.102)计算数据库对象的磁盘空间使用情况,或辅助呈现或理解使用情况的结果。bigint
结果以字节为单位。如果将 OID 传递给其中一个函数,而该 OID 不代表现有对象,则返回 NULL
。
表 9.102. 数据库对象大小函数
函数 描述 |
---|
显示存储任何单个数据值所使用的字节数。如果直接应用于表列值,则反映了所进行的任何压缩。 |
显示用于压缩单个可变长度值的压缩算法。如果值未压缩,则返回 |
显示已压缩到磁盘的值的 |
计算指定名称或 OID 的数据库使用的总磁盘空间。要使用此函数,您必须对指定的数据库拥有 |
计算附加到指定表的索引使用的总磁盘空间。 |
计算指定关系的一个 “fork” 使用的磁盘空间。(请注意,在大多数情况下,使用更高级别的函数 |
将人类可读格式的大小(由 |
将字节大小转换为更易于人类阅读的格式,并附带大小单位(根据需要为字节、kB、MB、GB、TB 或 PB)。请注意,单位是 2 的幂而不是 10 的幂,因此 1kB 是 1024 字节,1MB 是 10242 = 1048576 字节,以此类推。 |
计算指定表使用的磁盘空间,不包括索引(但包括其 TOAST 表(如果存在)、空闲空间映射和可视化映射)。 |
计算指定名称或 OID 的表空间使用的总磁盘空间。要使用此函数,您必须对指定的表空间拥有 |
计算指定表使用的总磁盘空间,包括所有索引和TOAST数据。结果等同于 |
上述操作表或索引的函数接受 regclass
参数,该参数只是 pg_class
系统目录中的表或索引的 OID。但是,您不必手动查找 OID,因为 regclass
数据类型的输入转换器会为您完成这项工作。有关详细信息,请参阅 第 8.19 节。
表中显示的函数(表 9.103)有助于识别与数据库对象关联的特定磁盘文件。
表 9.103. 数据库对象位置函数
函数 描述 |
---|
返回当前分配给指定关系的 “filenode” 号。filenode 是用于关系的(文件)名称的基本组成部分(有关更多信息,请参阅 第 66.1 节)。对于大多数关系,结果与 |
返回关系的完整文件路径名(相对于数据库集群的数据目录 |
给定表空间 OID 和存储它的 filenode,返回关系的 OID。这基本上是 |
表 9.104 列出了用于管理排序规则的函数。
表 9.104. 排序规则管理函数
函数 描述 |
---|
返回排序规则对象在操作系统中当前安装的实际版本。如果此版本与 |
返回数据库排序规则在操作系统中当前安装的实际版本。如果此版本与 |
基于操作系统中找到的所有区域设置,将排序规则添加到系统目录 |
表 9.105 列出了用于操作统计信息的函数。这些函数不能在恢复期间执行。
对这些统计信息操作函数所做的更改很可能被 autovacuum(或手动 VACUUM
或 ANALYZE
)覆盖,应视为临时性的。
表 9.105. 数据库对象统计信息操作函数
函数 描述 |
---|
更新表级统计信息。通常,这些统计信息会在 VACUUM 或 ANALYZE 中自动收集或更新,因此无需调用此函数。但是,在恢复后,如果尚未运行 跟踪的统计信息可能因版本而异,因此参数以 SELECT pg_restore_relation_stats( ' 例如,要为表 SELECT pg_restore_relation_stats( 'schemaname', 'myschema', 'relname', 'mytable', 'relpages', 173::integer, 'reltuples', 10000::real); 参数 此外,此函数接受参数名称 次要错误将报告为 调用者必须拥有表上的 |
清除给定关系的表级统计信息,就像表是新创建的一样。 调用者必须拥有表上的 |
创建或更新列级统计信息。通常,这些统计信息会在 VACUUM 或 ANALYZE 中自动收集或更新,因此无需调用此函数。但是,在恢复后,如果尚未运行 跟踪的统计信息可能因版本而异,因此参数以 SELECT pg_restore_attribute_stats( ' 例如,要为表 SELECT pg_restore_attribute_stats( 'schemaname', 'myschema', 'relname', 'mytable', 'attname', 'col1', 'inherited', false, 'avg_width', 125::integer, 'null_frac', 0.5::real); 必需的参数是 此外,此函数接受参数名称 次要错误将报告为 调用者必须拥有表上的 |
清除给定关系和属性的列级统计信息,就像表是新创建的一样。 调用者必须拥有表上的 |
表 9.106 列出了提供分区表结构信息的函数。
表 9.106. 分区信息函数
例如,要检查分区表 measurement
中包含的数据的总大小,可以使用以下查询
SELECT pg_size_pretty(sum(pg_relation_size(relid))) AS total_size FROM pg_partition_tree('measurement');
表 9.107 显示了可用于索引维护任务的函数。(请注意,这些维护任务通常由 autovacuum 自动完成;只有在特殊情况下才需要使用这些函数。)这些函数不能在恢复期间执行。这些函数的用法仅限于超级用户和给定索引的所有者。
表 9.107. 索引维护函数
函数 描述 |
---|
扫描指定的 BRIN 索引以查找基表中的页面范围,这些页面范围当前未被索引摘要;对于任何此类范围,它通过扫描这些表页面来创建一个新的摘要索引元组。返回插入到索引中的新页面范围摘要的数量。 |
如果尚未摘要,则摘要覆盖给定块的页面范围。这类似于 |
如果存在,则删除摘要覆盖给定表块的页面范围的 BRIN 索引元组。 |
通过将指定 GIN 索引的“待处理”列表中的条目批量移动到主 GIN 数据结构来清理它。返回从待处理列表中移除的页面数。如果参数是使用 |
表 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. 通用文件访问函数
表 9.109 中显示的函数用于管理劝告性锁。有关这些函数的正确使用方法的详细信息,请参阅第 13.3.5 节。
所有这些函数都旨在用于锁定应用程序定义的资源,这些资源可以通过单个 64 位键值或两个 32 位键值来标识(请注意,这两个键空间不重叠)。如果另一个会话已经持有同一资源标识符上的冲突锁,则这些函数将根据函数的适用性,要么等待资源可用,要么返回 false
结果。锁可以是共享的或排他的:共享锁与同一资源上的其他共享锁不冲突,只与排他锁冲突。锁可以是会话级别的(因此它们会一直持有到释放或会话结束),也可以是事务级别的(因此它们会一直持有到当前事务结束;没有手动释放的机制)。多个会话级锁请求会堆叠,因此如果同一资源标识符被锁定三次,则必须有三个解锁请求才能在会话结束前释放该资源。
表 9.109. 劝告性锁函数
如果您在文档中看到任何不正确、与您对特定功能的使用经验不符或需要进一步澄清的内容,请使用此表格报告文档问题。