Postgresql-将AWS RDS数据迁移到GCP Cloudsql

时间:2019-01-12 13:23:54

标签: postgresql amazon-rds google-cloud-sql

我正在尝试将一堆数据库从AWS RDS Postresql服务器迁移到GCP Cloud SQL。 由于两者都是postgresql引擎,所以我认为从aws取pgdump并在gcp中导入将是一个简单的解决方案。 但是,当导入云sql失败并错误提示缺少某些角色时,我感到很惊讶。 下面是尝试的步骤

AWS RDS中的数据库转储

pg_dump -h <connection_endpoint> -U root -f db_dump.sql <db_name>

然后我尝试使用以下命令将其导入GCP Cloud sql

instance-1:~$ PGPASSWORD=<passwprd> psql   --host=<host_name>  --port=5432   --username=postgres   --dbname=<db_name> < db_dump.sql
SET
SET
SET
SET
SET
 set_config 
------------

(1 row)

SET
SET
SET
CREATE SCHEMA
ERROR:  must be member of role "rdsadmin"
CREATE SCHEMA
ERROR:  must be member of role "root"
CREATE SCHEMA
ERROR:  must be member of role "root"
CREATE SCHEMA
ERROR:  must be member of role "root"
CREATE SCHEMA
ERROR:  must be member of role "root"
CREATE EXTENSION
ERROR:  must be owner of extension plpgsql
CREATE EXTENSION
COMMENT
SET
SET
CREATE TABLE...

您可以看到rdsadmin和root角色丢失。 如何确保这些丢失的角色以正确的设置出现在GCP Cloud sql中,因为即使在cloud sql中创建了具有相同名称的角色后,它也不会成功? 有什么解决办法吗?

1 个答案:

答案 0 :(得分:5)

在找到解决方案时回答我自己的问题。

由于rdsAdmin用户是由AWS创建的,用于RDS集群上的管理任务。在没有所有者的情况下使用pg_dump并在没有所有者的情况下进行还原可以解决问题,并且我能够在云sql中执行还原。

pg_dump -Fc -O -h  <rds-host> -U <user> -d <db> > db.dump
pg_restore -U postgres -d <db> -h <cloudsql-host> -v --no-owner db.dump

pg_restore需要格式化的压缩输出来还原。为了实现-Fc用于pg_dump命令

相关问题