跳到主要内容

系统信息函数和运算符

系统信息函数用于诊断当前连接、检查权限和读取对象元数据。查询结果可能受会话身份、搜索路径及服务器版本影响;以下使用 PostgreSQL。

会话与环境​

SELECT version(), current_database(), current_schema();
SELECT current_user, session_user, current_setting('TimeZone');
SELECT pg_backend_pid(), inet_client_addr(), inet_server_addr();

current_user 是当前权限检查身份,session_user 是会话登录身份;在 SET ROLE 或安全定义者函数内可能不同。inet_client_addr() 在本地 Unix 套接字连接时可为 NULL。version() 包含构建信息;程序判断能力时更适合读取 current_setting('server_version_num') 并按版本要求检查。

权限与对象​

SELECT has_table_privilege(current_user, 'public.orders', 'SELECT');
SELECT to_regclass('public.orders');
SELECT pg_get_viewdef('public.active_orders'::regclass);

has_table_privilege 检查表权限;还有列、模式、函数等权限检查函数。to_regclass 在对象不存在时返回 NULL,而直接转成 regclass 可能报错。pg_get_viewdef 返回视图定义文本,不能把反编译文本当成稳定、字节完全相同的原始 DDL。对象名不可信时应使用参数绑定及安全的标识符处理。

大小与可见性​

SELECT pg_size_pretty(pg_relation_size('public.orders'));
SELECT pg_size_pretty(pg_total_relation_size('public.orders'));

pg_relation_size 默认测主数据分支,pg_total_relation_size 还计入索引和 TOAST 等;格式化后的字符串适合展示,不适合做数值排序。pg_table_is_visible(oid) 可检查对象能否通过搜索路径不带模式名地访问。系统目录和统计信息不是应用数据的权限替代品;生产诊断尽量使用只读权限。