ERROR: permission denied for language c

Instead of setting the language to trusted which is considered bad, and dangerous, you should rather use roles to provide superuser privilege temporarily to the user during the time he manipulates the stored procedures:

as superuser:

create role dba with superuser noinherit;
grant dba to user;

then logged-in as user you can set role dba

And then you could create stored procedures in C while you temporarily have the role dba.

reset role; when you're finished to come back to normal rights.

More info here: https://dba.stackexchange.com/questions/37336/cannot-create-function-in-plpython3u-permission-denied


That's right, according to doc:

Only superusers can create functions in untrusted languages

Quick check:

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

If you really want this, then you could modify pg_language system catalog (ALTER LANGUAGE doesn't have such option):

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

Per user @Otheus below: the UPDATE statement must be done in the DB where the function will reside.

Tags:

C

Postgresql