Как вывести дамп Google Cloud SQL для PostgreSQL DB для импорта обратно в обычную PostgreSQL DB? - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь экспортировать данные из экземпляра Google Cloud SQL (PostgreSQL), чтобы импортировать их в обычную базу данных Postgres, используя pg_dump и pg_restore:

pg_dump -h sql_proxy -F t --no-owner --no-acl > backup.tar
pg_restore backup.tar -c

Однако при запуске pg_restore я получаю следующие ошибки:

pg_restore: [archiver (db)] Ошибка при обработке C: pg_restore: [archiver (db)] Ошибка от TO C запись 197; 1259 17010 ТАБЛИЦА xxx postgres pg_restore: [archiver (db)] не удалось выполнить запрос: ОШИБКА: роль "postgres" не существует Команда была: ALTER TABLE publi c .xxx ВЛАДЕЛЕЦ postgres;

pg_restore: [archiver (db)] Ошибка от TO C запись 198; 1259 17017 ТАБЛИЦА xxy postgres pg_restore: [archiver (db)] не удалось выполнить запрос: ОШИБКА: роль "postgres" не существует Команда была: ALTER TABLE publi c .xxy ВЛАДЕЛЕЦ postgres;

...

Я попробовал несколько вариантов флагов, но безуспешно. Я нашел много статей о том, как выполнить миграцию наоборот (с PostgreSQL на Google Cloud SQL для PostgreSQL), а в Документах Google Cloud только описывается, как экспортировать данные для импорта в Облако SQL DB снова.

Буду признателен за любую помощь в том, как избежать описанных выше ошибок и как перенести БД с минимальными изменениями.

1 Ответ

1 голос
/ 16 января 2020

Вам нужно, чтобы роли, на которые есть ссылки, уже были предварительно созданы в экземпляре, в который вы хотите импортировать дамп.

Для этого есть два способа:

  • используйте pg_dumpall вместо pg_dump или
  • pg_dumpall --globals-only, а затем восстановите этот дамп (это, помимо прочего, создаст роли)
...