我有一个来自 PostgreSQL 15 的备份,我正在尝试将其导入到 PostgreSQL 16 中。版本之间的重大更改之一是“限制 CREATEROLE 的权限及其修改其他角色的能力”
以前,具有 CREATEROLE 权限的角色可以更改任何非超级用户角色的许多方面。此类更改(包括添加成员)现在要求请求更改的角色具有 ADMIN OPTION 权限。
这意味着以前的数据库转储有角色授予命令抛出错误。sql 是通过以下方式获得的pg_dumpall --roles-only
(--no-owner
没有效果):
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".
我尝试过使用管理员授予角色,这样当我们将来尝试授予角色时就不会出现此问题,但它会使命令乱序,因此它们在恢复时仍然失败:
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];
GRANTED BY
除了梳理 PostgreSQL 15 中的权限以便导入时没有问题之外,还有什么方法可以省略命令中的 或任何其他方法来解决此问题?
编辑:user0 已经是超级用户