当我用一个非超级用户创建一个这样的函数时,我得到了下面的错误:
第一个月
创建的函数为:
CREATE OR REPLACE FUNCTION dblink_connect (text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT;
字符串
但是如果我想给予我的非超级用户C语言的权限,我会得到下面的错误:postgres=# grant usage on language c to caixa; ERROR: language "c" is not trusted
个
也就是说,非超级用户不能用C语言创建函数?还是我做错了什么
4条答案
按热度按时间1wnzp6jl1#
没错,根据doc:
只有超级用户才能创建不受信任语言的函数
快速检查:
字符串
如果您真的想要这样做,则可以修改
pg_language
系统目录(ALTER LANGUAGE
没有这样的选项):型
每个用户@Otheus如下:UPDATE语句必须在该函数将驻留的DB中完成。
idfiyjo82#
与其将语言设置为被认为是坏和危险的受信任语言,不如使用角色在用户操作存储过程期间临时向用户提供超级用户权限:
作为超级用户:
字符串
然后以用户身份登录,您可以
set role dba
然后,您可以在临时拥有
dba
角色的情况下用C创建存储过程。reset role;
当你完成后回到正常的权利。More info here: https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied
w46czmvw3#
在RDS postgres 12.5中的uuid函数中。我要做的就是
字符串
u4vypkhs4#
也许我的回答会对正在研究相关主题的人有用。
在DB从一个项目移动到另一个项目期间,我试图在GCP Postres安装中重新创建\恢复函数
uuid_generate_v1
:字符串
它失败了,错误与问题
ERROR: language "c" is not trusted
中的相同。我无法使用任何提供的答案,因为GCP不提供超级用户访问Postgres的权限。但我找到了一个变通办法,可能对某些人有帮助。
似乎这个函数以及一堆其他函数(
uuid_generate_v1mc
,uuid_generate_v3
,uuid_generate_v4
,uuid_generate_v5
,uuid_nil
,uuid_ns_dns
,uuid_ns_oid
,uuid_ns_url
,uuid_ns_x500
),附带uuid-ossp
扩展。所以我所做的只是创建一个扩展,它带来了所有必要的功能。型