在客户端服务器上,我遇到了一个问题 - 我没有权限创建扩展pgcrypto
。因此,服务器管理员为我创建了扩展,现在我可以看到pg_available_extensions
已pgcrypto
安装 ( 1.1
),但是我无法使用其功能:
=> select gen_random_uuid();
ERROR: function gen_random_uuid() does not exist
LINE 1: select gen_random_uuid();
^
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
另外,我没有删除扩展的权限(这可能是问题的线索?):
=> drop extension pgcrypto;
ERROR: must be owner of extension pgcrypto
知道哪里出了问题吗?为什么我看不到pgcrypto
函数?与权限有关吗?
答案1
几种可能的解释:
PostgreSQL 版本早于 9.4。
gen_random_uuid()
以前不存在 此功能http://www.postgresql.org/docs/9.4/static/release-9-4.html:将 UUID 随机数生成器 gen_random_uuid() 添加到 pgcrypto (Oskari Saarenmaa)
用于
select version();
检查版本。或者它是 9.4+,但扩展是在不属于您的 SQL 会话的架构中创建的
search_path
。使用 psql 中的元命令\dx
列出已安装的扩展,并检查Schema
列。或者扩展位于 中包含的架构中
search_path
,但数据库用户缺乏查看它的权限。使用 授予它:GRANT USAGE ON SCHEMA schema_name TO role_name
。