PostgreSQL已安装uuid-ossp扩展却无法调用uuid_generate_v4()及权限配置求助
问题解决方法
一、排查uuid_generate_v4()找不到的原因
- 先确认
uuid-ossp扩展安装在哪个schema下,执行:
SELECT extname, nspname FROM pg_extension WHERE extname = 'uuid-ossp';
- 如果返回的
nspname不是public(比如是pg_catalog),说明当前用户的search_path没包含该schema,导致找不到函数:- 临时生效:执行
SET search_path TO public, pg_catalog;(把查到的schema加进去),再尝试建表 - 永久生效:给目标用户设置默认search_path,替换
your_user_name为实际用户名,执行后需重新连接数据库生效:
ALTER ROLE your_user_name SET search_path TO public, pg_catalog; - 临时生效:执行
- 也可以直接在创建表时指定函数的schema前缀,比如:
CREATE TABLE my_table( uuid UUID NOT NULL UNIQUE DEFAULT pg_catalog.uuid_generate_v4() );
二、给普通用户赋予函数执行权限
超级用户默认拥有所有权限,普通用户需要手动授权:
- 若函数在
publicschema:
GRANT EXECUTE ON FUNCTION uuid_generate_v4() TO your_user_name;
- 若函数在其他schema(比如
pg_catalog):
GRANT EXECUTE ON FUNCTION pg_catalog.uuid_generate_v4() TO your_user_name;
授权完成后,该用户即可调用该函数,包括将其用作表字段的默认值。
内容的提问来源于stack exchange,提问作者Gilhyeon Hong
相关产品推荐
相关产品推荐

