PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Donner à un utilisateur l'autorisation d'ALTER une fonction

Le manuel sur ALTER FUNCTION est clair là-dessus :

Bold accent mine.
Vous avez également besoin de quelques privilèges de base pour créer des fonctions. Par documentation :

La solution simple serait de modifier les fonctions en tant que superutilisateur . (Le superutilisateur par défaut est postgres , mais n'importe quel utilisateur peut devenir superutilisateur.)

Si vous avez vraiment besoin de changer de propriétaire sur toutes les fonctions, cela ferait l'affaire :

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

Limité au public schéma.
Pour plus de détails et d'explications, reportez-vous à cette réponse plus complète sur dba.SE .
Aussi étroitement lié :
DROP FUNCTION sans connaître le nombre/type de paramètres ?