PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erteilen Sie einem Benutzer die Berechtigung, eine Funktion zu ÄNDERN

Das Handbuch zu ALTER FUNCTION ist klar:

Fette Hervorhebung von mir.
Außerdem benötigen Sie ein paar grundlegende Privilegien, um Funktionen zu erstellen. Pro Dokumentation:

Die einfache Lösung wäre, Änderungen an Funktionen als Superuser vorzunehmen . (Standard-Superuser ist postgres , aber jeder Benutzer kann zum Superuser gemacht werden.)

Wenn Sie müssen wirklich den Besitz aller Funktionen ändern, dies würde den Zweck erfüllen:

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_%'

Beschränkt auf public Schema.
Weitere Details und Erklärungen finden Sie unter diese vollständigere Antwort auf dba.SE .
Ebenfalls eng verwandt:
DROP-FUNKTION, ohne die Anzahl/Art der Parameter zu kennen?