将本地 PostgreSQL 数据库文件合并到 AWS RDS 数据库

Merging local PostgreSQL database file to AWS RDS database

我的本地机器上有一个本地 Postgres 数据库。现在我想将本地 Postgres 数据库文件合并到 AWS 现有的 RDS 数据库中。有谁知道如何做到这一点?提前谢谢你。

如果 RDS 实例位于私有子网中,则您需要通过 EC2 实例建立隧道才能到达您的 RDS 实例。假设您的安全组已设置,以便您可以通过 ssh 进入 EC2 实例,并且 EC2 实例可以访问端口 5432 上的 RDS,您可以执行以下操作:

  1. 转储您的本地数据库:
$ pg_dump -Fc --no-acl --no-owner -h localhost -U<username> <database_name> -f <filename>

其中 <username> 是本地计算机上的 Postgres 用户名('postgres' 是默认用户)。例如:

$ pg_dump -Fc --no-acl --no-owner -h localhost -Upostgres my_development_db -f data.dump
  1. 在您的本地计算机上,设置到 RDS 实例的隧道。此示例假定 ec2-user 是您的 EC2 实例上的默认用户,如果您使用的是 AWS 映像,情况就是如此。
$ ssh -i /path/to/ssh/key -fNL 5433:[database_host]:5432 ec2-user@[app_host]

例如:

$ ssh -i ~/.ssh/ida_rsa -fNL 5433:my_prod_db.cbaxyzxyz.us-west-1.rds.amazonaws.com:5432 ec2-user@ec2-11-222-333-4.us-west-1.compute.amazonaws.com
  1. 然后,仍然在您的本地计算机上,将本地数据库转储导入远程 RDS 数据库服务器:
$ pg_restore --no-owner -n public -c -1 -p 5433 -U<username> -h 127.0.0.1 -d <database_name> <filename>

例如:

$ pg_restore --no-owner -n public -c -1 -p 5433 -Umy_prod_username -h 127.0.0.1 -d prod_db_name data.dump

出现提示时输入 RDS 数据库密码。

请注意,-c ("clean") 选项将删除数据库对象,然后再从本地数据库转储中重新创建它们。