Преобразовать дамп PostgreSQL SQL в дамп PostgreSQL нестандартного формата - PullRequest
0 голосов
/ 03 сентября 2018

Мой пример использования следующий:

  • У меня есть дампы PostgreSQL, созданные с помощью pg_dump -F p (текстовый файл сценария SQL), который я не могу контролировать, как они создаются
  • Мне нравится pg_restore гибкость (--no-owner, --data-only, --clean и т. Д.)

Я знаю, что должен использовать psql с дампами простого текста SQL, но есть ли способ конвертировать дамп SQL в дамп пользовательского формата PostgreSQL , чтобы я мог использовать pg_restore или какой-нибудь способ получить все его опции?

Спасибо за внимание.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Как уже упоминалось в других ответах / комментариях, вы не можете конвертировать его напрямую. Что вы должны сделать, это создать временную базу данных из файла резервной копии sql и использовать pg_dump, чтобы создать из нее пользовательский формат.

Убедитесь, что резервная копия sql не является "чистым" файлом восстановления, то есть она не удаляет базу данных в верхней части файла. Если это так, удалите "DROP DATABASE dbase" ..

Создать временную базу данных:

psql
CREATE DATABASE mytempdb;
\q

Затем восстановите нужную вам резервную копию:

psql mytempdb < my_database_backup.sql

Примечание. Вот почему вам НЕ нужна строка «drop database ...» в верхней части файла sql. Вместо этого он отбросит вашу исходную базу данных.

Дамп как пользовательский формат:

pg_dump mytempdb -Fc -f custom_format.dump
0 голосов
/ 03 сентября 2018

После использования открытого текста с помощью pg_dump, невозможно выполнить пользовательский формат.

pg_dump -d имя_базы> data.sql используя метод ниже мы можем восстановить

psql -d dbname -f data.sql

Custom-формат: pg_dump --create --clean -h <127.0.0.1> -p 5432 -d имя_базы -Fc -f data.sql

Восстановление: pg_restore -h <127.0.0.1> -p 5432 -d dbname -C -Fd /tmp/data.sql

...