4.13. 杂项函数 #
表 4.25. 会话信息函数
| 名称 | 返回类型 | 描述 |
|---|---|---|
current_user | name | 当前执行上下文的用户名 |
session_user | name | 会话用户名 |
user | name | 等价于 current_user |
session_user 是发起数据库连接的用户;它在该连接期间是固定的。current_user 是适用于权限检查的用户标识符。当前它总是等于会话用户,但将来可能会有“setuid” 函数和其他允许当前用户临时更改的设施。用 Unix 的说法,会话用户是“真实用户”,当前用户是“有效用户”。
注意这些函数在 SQL 中具有特殊的语法地位:调用它们时不能带尾部的圆括号。
Deprecated
函数 getpgusername() 是
current_user 的已废弃等价形式。
表 4.26. 系统信息函数
| 名称 | 返回类型 | 描述 |
|---|---|---|
version | text | PostgreSQL 版本信息 |
version() 返回一个描述
PostgreSQL 服务器版本的字符串。
表 4.27. 访问权限查询函数
| 名称 | 返回类型 | 描述 |
|---|---|---|
has_table_privilege(user,
table,
access)
| boolean | 用户是否有访问表的权限 |
has_table_privilege(table,
access)
| boolean | 当前用户是否有访问表的权限 |
has_table_privilege 判断一个用户能否以某种特定方式访问一个表。用户可以按名称或按 ID(pg_user.usesysid)指定,如果省略该参数则假定为
current_user。表可以按名称或按 OID 指定。(因此 has_table_privilege 实际上有六种变体,可以通过参数的数量和类型区分。)所需的访问类型由一个文本字符串指定,它必须求值为
SELECT、INSERT、UPDATE、DELETE、RULE、REFERENCES 或
TRIGGER 之一。(但字符串的大小写无关紧要。)
表 4.28. 目录信息函数
| 名称 | 返回类型 | 描述 |
|---|---|---|
pg_get_viewdef(viewname) | text | 获取视图的 CREATE VIEW 命令 |
pg_get_ruledef(rulename) | text | 获取规则的 CREATE RULE 命令 |
pg_get_indexdef(indexOID) | text | 获取索引的 CREATE INDEX 命令 |
pg_get_userbyid(userid) | name | 根据给定的 ID 获取用户名 |
这些函数从系统目录中提取信息。pg_get_viewdef()、pg_get_ruledef() 和
pg_get_indexdef() 分别重构造视图、规则或索引的创建命令。(注意,这是反编译的重构造,不是该命令的逐字文本。)pg_get_userbyid() 根据一个
usesysid 值提取用户名。
表 4.29. 注释信息函数
| 名称 | 返回类型 | 描述 |
|---|---|---|
obj_description(objectOID, tablename) | text | 获取数据库对象的注释 |
obj_description(objectOID) | text | 获取数据库对象的注释(已废弃) |
col_description(tableOID, columnnumber) | text | 获取表列的注释 |
这些函数提取先前用
COMMENT 命令存储的注释。如果找不到与指定参数匹配的注释,则返回
NULL。
obj_description() 的双参数形式返回由其
OID 和包含它的系统目录的名称指定的数据库对象的注释。例如,obj_description(123456,'pg_class')
会检索 OID 为 123456 的表的注释。obj_description() 的单参数形式只需要对象 OID。它现在已被废弃,因为无法保证
OID 在不同的系统目录中是唯一的;因此可能返回错误的注释。
col_description() 返回表列的注释,由其表的 OID 和列号指定。obj_description() 不能用于表列,因为列没有自己的 OID。