系统管理函数#

下表显示了查询和修改运行时配置参数可用的函数。

表.配置设置函数

名字

返回类型

描述

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)

下表里的函数向其他服务器进程发送控制信号,通常这些函数的使用限制为超级用户。

表.服务器信号函数

名字

返回类型

描述

pg_cancel_backend(pid int)

boolean

取消一个后端的当前查询。

pg_reload_conf()

boolean

导致所有服务器进程重新装载它们的配置文件

pg_rotate_logfile()

boolean

滚动服务器的日志文件

如果成功,这些函数返回true,否则返回false。

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

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

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

下表里显示的函数计算数据库对象使用的磁盘空间。

数据库对象大小函数

名字

返回类型

描述

pg_column_size(any)

int

存储一个指定的数值需要的字节数(可能压缩过)

pg_database_size(oid)

bigint

指定 OID 代表的数据库使用的磁盘空间

pg_database_size(name)

bigint

指定名称的数据库使用的磁盘空间

pg_relation_size(oid)

bigint

指定 OID 代表的表或索引使用的磁盘空间

pg_relation_size(text)

bigint

指定名称的表或索引使用的磁盘空间,表名可以被模式名修饰

pg_size_pretty(bigint)

text

把用字节表示的大小转换成人类易读的尺寸

pg_tablespace_size(oid)

bigint

指定 OID 代表的表空间使用的磁盘空间

pg_tablespace_size(name)

bigint

指定名字的表空间使用的磁盘空间

pg_total_relation_size(oid)

bigint

指定 OID 代表的表使用的磁盘空间,包括索引和TOAST数据

pg_total_relation_size(text)

bigint

指定名字的表使用的磁盘空间,包括索引和TOAST数据。表名可以用模式名修饰

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

pg_database_size和pg_tablespace_size 接受一个数据库或表空间的OID或名字,并且返回该对象使用的总的磁盘空间。

pg_relation_size接受一个表、索引、压缩表的 OID 或者名字, 然后返回它们以字节计的磁盘大小。

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

pg_total_relation_size接受一个表或压缩表的OID或名字, 并且返回那个表使用的总的在磁盘上的空间,包括所有相关的索引和toast 表。

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

表.通用文件访问函数

名字

返回类型

描述

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;

下表中的函数用于管理咨询锁(Advisory Lock)。 有关正确使用这些函数的细节。

表.咨询锁函数

名字

返回类型

描述

pg_advisory_lock(key bigint)

void

获取排他会话级别咨询锁

pg_advisory_lock(key1 int, key2 int)

void

获取排他会话级别咨询锁

pg_advisory_lock_shared(key bigint)

void

获取共享会话级别咨询锁

pg_advisory_lock_shared(key1 int, key2 int)

void

获取共享会话级别咨询锁

pg_try_advisory_lock(key bigint)

boolean

如果可行获取排他会话级别咨询锁

pg_try_advisory_lock(key1 int, key2 int)

boolean

如果可行获取排他会话级别咨询锁

pg_try_advisory_lock_shared(key bigint)

boolean

如果可行获取共享会话级别咨询锁

pg_try_advisory_lock_shared(key1 int, key2 int)

boolean

如果可行获取共享会话级别咨询锁

pg_advisory_unlock(key bigint)

boolean

释放一个排他会话级别咨询锁

pg_advisory_unlock(key1 int, key2 int)

boolean

释放一个排他会话级别咨询锁

pg_advisory_unlock_shared(key bigint)

boolean

释放一个共享会话级别咨询锁

pg_advisory_unlock_shared(key1 int, key2 int)

boolean

释放一个共享会话级别咨询锁

pg_advisory_unlock_all()

void

释放所有当前会话持有的会话级别咨询锁

pg_advisory_lock锁定一个应用程序定义的资源, 该资源可以用一个 64 位或两个不重叠的 32 位键值标识。如果已经有另外的会话锁定了该资源, 那么该函数将会阻塞到该资源可用为止。这个锁是排它的。多个锁定请求将会被压入栈中,因此, 如果同一个资源被锁定了三次,那么它必须被解锁三次以将资源释放给其它会话使用。

pg_advisory_lock_shared类似于pg_advisory_lock, 不同之处仅在于共享锁可以和其它请求共享锁的会话共享,但排他锁除外。

pg_try_advisory_lock类似于pg_advisory_lock, 不同之处在于该函数不会阻塞以等待资源的释放。它要么立即获得锁并返回true, 要么返回false表示目前不能锁定。

pg_try_advisory_lock_shared类似于pg_try_advisory_lock, 不同之处在于该函数尝试获得一个共享锁而不是一个排它锁。

pg_advisory_unlock释放先前取得的排他会话级别咨询锁。 如果释放成功则返回true。如果指定的锁并未持有, 那么它将返回false并且服务器会报告一条 SQL 警告消息。

pg_advisory_unlock_shared类似于pg_advisory_unlock, 不同之处在于该函数释放的是共享会话级别咨询锁。

pg_advisory_unlock_all将会释放当前会话持有的所有会话级别咨询锁, 该函数在会话结束的时候被隐含调用,即使客户端异常地断开连接也是一样。