我试图导入一个云sql postgres数据库实例到一个新的实例与创建相同的用户,但我得到这个错误:
.....ALTER DEFAULT PRIVILEGES ALTER DEFAULT PRIVILEGES stderr: ERROR: must be member of role "readonly"
Btw readonly是一个用户用来连接我们的只读应用程序,但问题是,根据我的期望,我应该能够导出一个实例并导入它没有任何问题,我在这里错过了什么。
我的脚步
- 从cloud sql接口导出数据库
- 创建一个新的数据库,用户名为"proxyuser";(公司老惯例)
- 通过云导入sql,选择用户为"proxyuser"> ">
在此之后,导入在2小时时失败,并出现上述错误信息。
旁注:导入是从另一个实例的副本DB(我不认为这很重要,但让我知道,如果它做)
这是一个权限问题,按照GCP文档和这个线程的提示提供的建议修复这个问题,Google Postgres团队在这里。
创建新数据库和导入用户的过程必须是将成为数据库所有者的角色的成员。此外,如文档中所述,在导入SQL转储之前,拥有转储数据库中的对象或被授予对转储数据库中的对象的权限的所有数据库用户必须存在。
你可以在这里找到更多关于CloudSQL PostgreSQL用户和角色的信息。根据PostgreSQL文档,"你只能修改由你自己创建的对象的默认权限,或者由你作为角色的成员创建的对象的默认权限"。您也可以尝试由希望将数据导入到其中的数据库的所有者用户运行导入本身。您可以看一下下面的类似示例:
- 创建模式时,错误必须是角色的成员
- 必须是角色错误的成员