如何解决PostgreSQL中ERROR: permission denied for language c错误
解决PostgreSQL创建uuid-ossp扩展时的「permission denied for language c」错误
问题重现
尝试创建uuid-ossp扩展时触发权限错误,修改pg_language表也失败,操作步骤如下:
$ psql -U postgres -d postgres psql (15.4 (Debian 15.4-1.pgdg120+1)) postgres=> CREATE DATABASE books; CREATE DATABASE postgres=> \c books You are now connected to database "books" as user "postgres". postgres=> CREATE EXTENSION IF NOT EXISTS "uuid-ossp"; ERROR: permission denied for language c postgres=> UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c'; ERROR: permission denied for table pg_language
解决方案
方法一:切换系统数据库修改语言权限
- 从
books数据库切换回postgres系统数据库:
\c postgres
- 在
postgres数据库中修改C语言的信任状态(超级用户在此库拥有完整权限):
UPDATE pg_language SET lanpltrusted = true WHERE lanname = 'c';
- 切换回
books数据库创建扩展:
\c books CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
方法二:直接赋予数据库语言使用权限
若方法一无效,可直接为当前用户赋予C语言的使用权限:
\c books GRANT USAGE ON LANGUAGE c TO postgres; CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
方法三:从系统数据库同步扩展
如果uuid-ossp已在postgres数据库中安装,可直接同步到books库:
\c books CREATE EXTENSION "uuid-ossp" FROM unpackaged;
内容的提问来源于stack exchange,提问作者xpt
相关产品推荐
相关产品推荐

