PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Dê a um usuário permissão para ALTER uma função


O manual sobre ALTER FUNCTION é claro quanto a isso:

A ênfase em negrito é minha.
Você também precisa de alguns privilégios básicos para criar funções. Por documentação:

A solução simples seria fazer alterações nas funções como superusuário . (O superusuário padrão é postgres , mas qualquer usuário pode ser feito superusuário.)

Se você realmente precisa alterar a propriedade em todas as funções, isso faria o truque:
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_%'

Restrito ao public esquema.
Para mais detalhes e explicações, consulte esta resposta mais completa em dba.SE .
Também intimamente relacionados:
DROP FUNCTION sem saber o número/tipo de parâmetros?