当使用非超级用户创建这样的函数时,我会遇到以下错误:

ERROR: permission denied for language c SQL state: 42501

创建的功能是:

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

但是,如果我想将C语言的权限授予我的非超级用户,我会得到以下错误:

也就是说,非超级用户不能用C语言创建函数?或者我还有什么做错的吗?

推荐答案

是的,根据doc:

只有超级用户才能使用不受信任的语言执行create个函数

快速判断:

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';

Per user@Otheus DOWER:UPDATE语句必须在函数所在的数据库中执行.

Postgresql相关问答推荐

Postgs SQL用于比较两个表之间的数据并填充到目标中

Select 二维数组中的特定元素PostgreSQL

使用pg_repack从PostgreSQL中的表中删除OID

Postgres如何插入带有十进制逗号的实数?

Postgres:这是对OVERLAPS谓词的等效重写吗?

Postgres 转储按顺序插入

在 jOOQ 中 Select 相同的命名列

AWS RDS 公开访问

PostgreSQL ORDER BY 问题 - 自然排序

带有 postgres 的 DOCKER 容器,警告:could not open statistics file "pg_stat_tmp/global.stat": Operation not permitted

遇到序列化失败的条件是什么?

返回 NULL 的空数组的 array_length()

在这个 Dockerfile 中创建的 Postgres 用户名/密码在哪里?

Postgres 外键on update和on delete选项如何工作?

如何在数据库表中查找重复条目?

从 PostgreSQL 序列中 Select 多个 id

从长时间的postgres转换日期

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

用于将布尔列排序为 true、null、false 的 SQL

Rails 5 db 迁移:如何修复 ActiveRecord::ConcurrentMigrationError