我正在尝试使用gcp数据库迁移工具将cloudsql postgres 9.6实例迁移到cloudsql postgres 13实例。
我在UI中设置cloudsql.enable_pglogical
和cloudsql.logical_decoding
为on,并重新启动实例,但在尝试使用postgres帐户运行迁移时,我仍然得到以下错误:
连接源数据库失败。确保用户具有所需的特权。解决问题,然后重新启动迁移作业。详细信息:复制用户postgres没有足够的权限:复制用户没有对数据库postgres的schema逻辑的USAGE权限;复制用户对表public没有SELECT权限。doc_comment_read表示复制用户对public表没有SELECT权限。mailbox_google,复制用户没有对public表的SELECT权限。mailbox_microsoft,复制用户对表public没有SELECT权限。在表公共上,复制用户没有SELECT权限。复制用户group_members在public表上没有SELECT权限。
复制用户没有SELECT权限我发现了一些东西
- 不能使用postgres用户进行迁移,因为postgres用户没有复制属性。
https://cloud.google.com/sql/docs/postgres/users
The postgres user is part of the cloudsqlsuperuser role, and has the following attributes (privileges): CREATEROLE, CREATEDB, and LOGIN. It does not have the SUPERUSER or REPLICATION attributes.
您需要确保使用数据库的所有者来执行迁移,而不是postgres用户。
你必须给你的用户在逻辑模式上的权限。
GRANT USAGE ON SCHEMA pglogical TO my_user;
GRANT ALL ON SCHEMA pglogical TO my_user;
- 为您的用户添加复制属性(您需要从postgres用户执行此操作)
ALTER ROLE my_user with REPLICATION;
只是补充一下,完全可以使用postgres
用户进行复制。您需要为它设置复制属性
ALTER ROLE postgres with REPLICATION;
,然后授予必要的权限(参见第3点)。