sql >> Base de Datos >  >> RDS >> PostgreSQL

Dar permiso a un usuario para ALTERAR una función

El manual sobre ALTER FUNCTION es claro en eso:

Énfasis en negrita mío.
También necesita un par de privilegios básicos para crear funciones. Por documentación:

La solución simple sería realizar cambios en las funciones como superusuario . (El superusuario predeterminado es postgres , pero cualquier usuario puede convertirse en superusuario).

Si realmente necesita cambiar la propiedad en todas las funciones, esto haría el truco:

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

Restringido al public esquema.
Para obtener más detalles y explicaciones, consulte esta respuesta más completa en dba.SE .
También estrechamente relacionado:
DROP FUNCIÓN sin saber el número/tipo de parámetros?