Postgresql - миграция данных AWS RDS в GCP Cloudsql - PullRequest
0 голосов
/ 12 января 2019

Я пытаюсь перенести несколько баз данных с сервера AWS RDS Postresql на GCP Cloud SQL. Так как оба являются движком postgresql, я подумал, что будет простым решением взять pgdump из aws и выполнить импорт в 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 это не удается? Любое решение, пожалуйста?

1 Ответ

0 голосов
/ 12 января 2019

Отвечая на свой вопрос, когда я нашел решение для него.

Поскольку пользователь 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 требуется форматированный сжатый вывод. Для этого в команде pg_dump используется -Fc

...