c - 错误 : permission denied for language c

标签 c postgresql

当使用非 super 用户创建这样的函数时,出现以下错误:

错误:语言 c 的权限被拒绝 SQL 状态:42501

创建的函数是:

CREATE OR REPLACE FUNCTION dblink_connect (text)
RETURNS text
AS '$libdir/dblink','dblink_connect'
LANGUAGE C STRICT;

但是,如果我想将 C 语言的权限授予我的非 super 用户,则会出现以下错误: postgres=# 将 c 语言的使用授权给 caixa; 错误:语言“c”不受信任

也就是说,非 super 用户不能用C语言创建函数?还是我做错了什么?

最佳答案

没错,根据doc :

Only superusers can create functions in untrusted languages

快速检查:

SELECT lanpltrusted FROM pg_language WHERE lanname LIKE 'c';
 lanpltrusted 
--------------
 f
(1 row)

如果您真的想要这个,那么您可以修改pg_language 系统目录(ALTER LANGUAGE 没有这样的选项):

UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c';

下面的每个用户@Otheus:UPDATE 语句必须在函数所在的数据库中完成。

关于c - 错误 : permission denied for language c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7014437/

相关文章:

c - mktime 不更新 struct tm

c - 从 C api 访问用户数据中的 Lua 变量

sql - 棘手的 postgresql 查询优化(带排序的不同行聚合)

postgresql - 在给定第三个映射/连接表中的值的情况下,从 2 个表中检索值

sql - 如何在 elixir 的 Ecto 查询中使用 "case-when"?

c - 向路由器发送命令请求并以编程方式获得其回复

c - 如何使用 C 语言制作 ruby​​ gem?

C alloca 函数 - 当尝试分配太多内存时会发生什么

python - 在 postgresql 的引号或其他需要引号的代码行中列出?

sql - JOIN 语句不适用于 where 子句