文章目录
当使用非super用户创建如下面的函数时,会出现错误:
CREATE OR REPLACE FUNCTION mes_report.uuid_generate_v4()
RETURNS uuid
LANGUAGE c
PARALLEL SAFE STRICT
AS '$libdir/uuid-ossp', $function$uuid_generate_v4$function$
;
输出:
ERROR: permission denied for language c
SQL state: 42501
这是因为只有超级用户才能以不受信任的language创建function
引用文档说明::
Only superusers can create functions in untrusted languages
SELECT lanpltrusted FROM pg_language WHERE lanname LIKE 'c';
lanpltrusted
--------------
f
(1 row)
如果确实需要创建这样的function,可以通过修改PG_LANGUAGE中lanpltrusted的值(注意:没有Alter这样的语法选项):
UPDATE pg_language SET lanpltrusted = true WHERE lanname LIKE 'c';
再次尝试:
CREATE OR REPLACE FUNCTION mes_report.uuid_generate_v4()
RETURNS uuid
LANGUAGE c
PARALLEL SAFE STRICT
AS '$libdir/uuid-ossp', $function$uuid_generate_v4$function$
;
输出:
CREATE FUNCTION
Query returned successfully in 72 msec.