DROP USER
(ou DROP ROLE
, mesma coisa) não pode continuar enquanto a função ainda possuir alguma coisa ou tiver privilégios concedidos em outros objetos. Livre-se de todos os privilégios com
DROP OWNED
(o que não é muito óbvio pelo texto) . O manual:
Portanto, a sequência confiável de comandos para descartar uma função é:
REASSIGN OWNED BY ryan TO postgres; -- or some other trusted role
DROP OWNED BY ryan;
Execute os dois comandos em todos os bancos de dados do mesmo cluster onde o papel possui qualquer coisa ou tem algum privilégio!
E finalmente:
DROP USER ryan;
REASSIGN OWNED
altera a propriedade de todos os objetos atualmente pertencentes à função.DROP OWNED
então apenas revoga privilégios (propriedades fora do caminho).
Alternativamente, você pode pular
REASSIGN OWNED
. Então DROP OWNED
irá (também) descartar todos os objetos pertencentes ao usuário. (Tem certeza?!) Relacionado:
- Descartar uma função com privilégios (com uma função para gerar comandos para todos os bancos de dados relevantes)
- Encontre objetos vinculados a uma função do PostgreSQL