PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Concedi a un utente il permesso di ALTER una funzione

Il manuale su ALTER FUNCTION è chiaro su questo:

Enfasi in grassetto mio.
Per creare funzioni sono necessari anche un paio di privilegi di base. Per documentazione:

La soluzione semplice sarebbe apportare modifiche alle funzioni come superutente . (Il superutente predefinito è postgres , ma qualsiasi utente può diventare superutente.)

Se devi davvero cambiare la proprietà su tutte le funzioni, questo farebbe il trucco:

SELECT string_agg('ALTER FUNCTION '
            || quote_ident(n.nspname) || '.' 
            || quote_ident(p.proname) || '(' 
            || pg_catalog.pg_get_function_identity_arguments(p.oid)
            || ') OWNER TO foo;'
          , E'\n') AS _sql
FROM   pg_catalog.pg_proc p
JOIN   pg_catalog.pg_namespace n ON n.oid = p.pronamespace
WHERE  n.nspname = 'public';
-- AND p.relowner <> (SELECT oid FROM pg_roles WHERE rolname = 'foo')
-- AND p.proname ~~ 'f_%'

Limitato al public schema.
Per maggiori dettagli e spiegazioni fare riferimento a questa risposta più completa su dba.SE .
Anche strettamente correlato:
FUNZIONE DROP senza conoscere il numero/il tipo di parametri?