postgresql - Postgresql - AWS RDS 数据迁移到 GCP Cloudsql
问题描述
我正在尝试将一堆数据库从 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 中,因为即使在云 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 命令中使用
推荐阅读
- java - 如何在 java 中使用 ModelAndView 操作 http 响应?
- sql - 从表 2 中提取最后一个日期时间,该日期时间在日期时间被拉入表 1 之前发生
- html - 如何在 Flask-WTforms StringField 中隐藏活动字符计数器并实现 CSS
- python - 如何解决Robot Framework日志中以“\u0e”开头的乱码
- ios - png 透明图像元数据带有白色背景
- python - 使用 Python 的 URL 请求
- javascript - 从 filter 和 findIndex 循环的更好解决方案?更短的解决方案?JS
- sql-server - 如何查看当前的渐变尺寸设置?
- ssl - mitmproxy 可以记录“TLS Client Hello”和“TLS Server Hello”消息吗?
- android - 在不离开父屏幕的情况下导航到新屏幕