Eu tenho um backup do PostgreSQL 15 que estou tentando importar para o PostgreSQL 16. Uma das principais alterações entre as versões é "Restringir os privilégios do CREATEROLE e sua capacidade de modificar outras funções"
Anteriormente, as funções com privilégios CREATEROLE podiam alterar muitos aspectos de qualquer função que não fosse de superusuário. Essas alterações, incluindo a adição de membros, agora exigem que a função que solicita a alteração tenha permissão ADMIN OPTION.
Isso significa que dumps anteriores do banco de dados apresentam erros de lançamento de comandos de concessão de função. O sql foi obtido com pg_dumpall --roles-only
( --no-owner
não tem efeito):
GRANT role TO user1 GRANTED BY user0;
ERROR: permission denied to grant privileges as role "user0"
DETAIL: The grantor must have the ADMIN option on role "role".
Tentei conceder as funções com admin para não ter esse problema quando tentarmos conceder no futuro, mas isso coloca os comandos fora de ordem e ainda falham na restauração:
GRANT role TO user1 GRANTED BY user0;
GRANT role TO user2 GRANTED BY user0;
GRANT role TO user3 GRANTED BY user0;
GRANT role TO user0 WITH ADMIN OPTION GRANTED BY [me];
Existe alguma maneira de deixar de lado os GRANTED BY
comandos ou qualquer outra maneira de corrigir isso além de vasculhar as permissões no PostgreSQL 15 para que sejam importadas sem problemas?
Editar: user0 já é um superusuário
Você tem duas opções:
Conceda explicitamente a função
WITH GRANT OPTION
nouser0
banco de dados antigo antes de despejar as funções:Então o dump conterá
e a restauração funcionará sem erros.
Eu tentei no PostgreSQL v15, depois descartei e restaurei para a v16.
Use
pg_dumpall
a partir da v16 para descartar as funções. Então a restauração deverá funcionar sem erros.