我在本地机器上有一个本地Postgres数据库。现在我想将本地Postgres数据库文件合并到AWS现有的RDS数据库。有谁知道如何做到这一点?先感谢您。
如果RDS实例位于私有子网中,则需要通过EC2实例隧道到达RDS实例。假设您的安全组已设置为可以进入EC2实例,并且EC2实例可以访问端口5432上的RDS,您可以执行以下操作:
$ 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
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 [email protected]
$ 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”)选项将在从本地数据库转储重新创建数据库对象之前删除它们。