9.20. 系统管理函数

Table 9-44 显示了那些可以用于查询以及修改运行时配置参数的函数。

Table 9-44. 配置设置函数

名字返回类型描述
current_setting(setting_name) text当前设置的值
set_config(setting_name, new_value, is_local) text设置参数并返回新值

current_setting 用于以查询形式获取 setting_name 设置的当前数值。它和SQL命令 SHOW 是等效的。 比如:

SELECT current_setting('datestyle');

 current_setting
-----------------
 ISO, MDY
(1 row)

set_config 将参数 setting_name 设置为 new_value。如果 is_local 设置为 true,那么新数值将只应用于当前事务。 如果你希望新的数值应用于当前会话,那么应该使用 false。 它等效于 SQL 命令 SET。比如:

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

 set_config
------------
 off
(1 row)

Table 9-45 里显示的函数向其它服务器进程发送控制信号。 这些函数的使用限制为超级用户。

Table 9-45. 服务器信号函数

名字返回类型描述
pg_cancel_backend(pid int) boolean取消一个后端的当前查询
pg_reload_conf() boolean导致服务器进程重新装载它们的配置文件
pg_rotate_logfile() boolean旋转服务器的日志文件

如果成功,这些函数返回 true,如果没有成功则返回 false

pg_cancel_backend 向由进程 ID (pid) 标识的后端进程发送一个查询取消(Query Cancel)(SIGINT)信号。 一个活跃的后端进程的进程 ID 可以从 pg_stat_activity 视图的 procpid 字段找到,或者在服务器上用 ps 列出 postgres 进程。

pg_reload_confpostmaster 发送一个 SIGHUP 信号, 导致所有服务器进程重载配置文件。

pg_rotate_logfile 给日志管理器发送信号,告诉它立即切换到一个新的输出文件。 这个函数只有在 redirect_stderr 用于日志输出的时候才有用, 否则的话就根本没有日志管理器子进程。

Table 9-46 里显示的函数帮助我们进行在线备份。 这些函数仅限超级用户使用。

Table 9-46. 备份控制函数

名字返回类型描述
pg_start_backup(label_text text) text设置执行在线备份
pg_stop_backup() text完成执行在线备份

pg_start_backup 接受一个参数,这个参数可以是任意用户为备份定义的标签。 (通常这是备份转储文件存放所在的名字。)这个函数向数据库集群的数据目录写入一个备份标签文件, 然后以文本方式返回备份的起始 WAL 偏移。(用户不需要注意这个结果值,提供他只为了万一需要的场合。)

pg_stop_backup 删除 pg_start_backup 创建的标签文件, 并且在 WAL 归档区里创建一个备份历史文件。这个历史文件包含给予 pg_start_backup 的标签, 备份的起始与终止 WAL 偏移量,以及备份的起始和终止时间。返回值是备份的终止 WAL 偏移 (同样也可能没有什么用)。

有关正确使用这些函数的细节,参阅 Section 23.3

Table 9-47 里显示的函数计算数据库对象使用的实际磁盘空间。

Table 9-47. 数据库对象尺寸函数

名字返回类型描述
pg_column_size(any)int存储一个数值需要的字节数(可能压缩过)
pg_tablespace_size(oid) bigint指定 OID 代表的表空间使用的磁盘空间
pg_tablespace_size(name) bigint指定名字的表空间使用的磁盘空间
pg_database_size(oid) bigint指定 OID 代表的数据库使用的磁盘空间
pg_database_size(name) bigint指定名称的数据库使用的磁盘空间
pg_relation_size(oid) bigint指定 OID 代表的表或者索引所使用的磁盘空间
pg_relation_size(text) bigint指定名称的表或者索引使用的磁盘空间。这个名字可以用模式名修饰。
pg_total_relation_size(oid) bigint指定 OID 代表的表使用的磁盘空间,包括索引和压缩数据
pg_total_relation_size(text) bigint指定名字的表所使用的全部磁盘空间,包括索引和压缩数据。表名字可以用模式名修饰。
pg_size_pretty(bigint) text把字节计算的尺寸转换成一个人类易读的尺寸单位

pg_column_size 显示用于存储任意独立数据值的空间。

pg_tablespace_sizepg_database_size 接受一个数据库的 OID 或者名字,然后返回改对象使用的全部磁盘空间。

pg_relation_size 接受一个表,索引或者压缩表的 OID 或者名字, 然后返回它们的以字节计的尺寸。

pg_total_relation_size 接受一个表或者一个压缩表的 OID 或者名称, 然后返回以字节计的数据以及所有相关的索引和压缩表的尺寸。

pg_size_pretty 可以用于把其它这些函数的结果格式化成一种人类易读的格式, 可以根据情况使用 KB,MB,GB 或者 TB。

Table 9-48 里显示的函数提供了对承载数据库服务器的机器上的文件的本地访问接口。 只有那些在数据库集群目录和 log_directory 目录里面的文件可以访问。 使用相对路径访问集群目录里面的文件,以及匹配 log_directory 配置设置的路径访问日志文件。 只有超级用户才能使用这些函数。

Table 9-48. 通用文件访问函数

名字返回类型描述
pg_ls_dir(dirname text) setof text列出目录中的文件
pg_read_file(filename text, offset bigint, length bigint) text返回一个文本文件的内容
pg_stat_file(filename text) record返回一个文件的信息

pg_ls_dir 返回指定目录里面的除了特殊项 "."".." 之外所有名字。

pg_read_file 返回一个文本文件的一部分,从 offset 开始, 返回最多 length 字节(如果先达到文件结尾,则小于这个数值)。 如果 offset 是负数,那么它就是相对于文件结尾。

pg_stat_file() 返回一条包含文件大小,最后访问时间戳,最后更改时间戳, 最后文件状态修改时间戳(只在 Unix 平台上可用),文件创建时间戳(只在 Windows 平台上可用), 以及一个表示其是否一个目录的 boolean 值。典型的用法包括:

SELECT * FROM pg_stat_file('filename');
SELECT (pg_stat_file('filename')).modification;