跳到主要内容

系统管理函数

系统管理函数可能改变服务器状态、终止连接或影响备份与复制,不应在普通业务查询中随意调用。以下是 PostgreSQL 常见类别,实际权限和可用性应以部署环境为准。

配置与会话​

SELECT current_setting('TimeZone');
SELECT set_config('application_name', 'batch-import', true);
-- 第三个参数为 true:设置只在当前事务内生效

pg_reload_conf() 请求服务器重载配置文件,返回是否成功发送信号,并不保证每个参数都已生效;有些参数必须重启服务器。pg_cancel_backend(pid) 请求取消该后端当前查询,pg_terminate_backend(pid) 请求结束会话,两者影响范围不同,且需要相应权限。先从 pg_stat_activity 确认 PID、数据库、用户和正在执行的工作,避免影响其他人的事务。

WAL、备份与空间​

pg_current_wal_lsn() 查看当前 WAL 位置;pg_switch_wal() 主动切换 WAL 文件,可能增加存储和归档负担。备份相关的 pg_backup_start、pg_backup_stop 应严格按物理备份流程成对使用,不是普通文件复制的替代品。pg_relation_filenode、pg_relation_filepath 可用于诊断物理存储位置,但文件标识可能因重写而改变,不要持久化作为业务标识。

咨询锁​

SELECT pg_try_advisory_xact_lock(1001);
-- 成功获取事务级咨询锁返回 true;事务结束自动释放

咨询锁键由应用定义,数据库不会自动替业务数据加唯一约束;不同代码路径必须遵守同一锁约定。会话级 pg_advisory_lock 要显式释放或结束连接,在连接池里尤其容易被误用。高权限函数应限制授权、记录操作,并区分只读诊断与会改变状态的调用。