Слияние локального файла базы данных PostgreSQL с базой данных AWS RDS - PullRequest
0 голосов
/ 23 апреля 2019

У меня есть локальная база данных Postgres на моей локальной машине. Теперь я хотел бы объединить файл локальной базы данных Postgres с существующей базой данных RDS AWS. Кто-нибудь знает как это сделать? Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2019

Если экземпляр RDS находится в частной подсети, вам необходимо туннелировать через экземпляр EC2, чтобы получить доступ к вашему экземпляру RDS. Предполагая, что ваши группы безопасности настроены так, что вы можете использовать ssh в экземпляре EC2, а экземпляр EC2 имеет доступ к RDS через порт 5432, вы можете сделать следующее:

  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") удалит объекты базы данных, прежде чем воссоздать их из локального дампа базы данных.

...