Postgresql - AWS RDS 数据迁移到 GCP Cloudsql

Postgresql - AWS RDS data migration to GCP Cloudsql

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

A​​WS 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 中,因为即使在云 sql 中创建具有相同名称的角色也不会成功? 请问有什么解决办法吗?

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

因为 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 命令中使用