входной файл выглядит как дамп текстового формата. Пожалуйста, используйте psql

91

Я делаю резервную копию, используя

pg_dump db_production > postgres_db.dump

а затем я копирую его на localhost с помощью scp.

Теперь, когда я импортирую свой локальный БД, он выдает ошибку

pg_restore: [archiver] input file appears to be a text format dump. Please use psql.

с помощью командной строки

pg_restore -d db_development postgres_db.dump
Хасиб Ахмад
источник

Ответы:

134

Из pg_dumpдокументации:

Примеры

Чтобы выгрузить базу данных mydb в файл SQL-скрипта :

$ pg_dump mydb > db.sql

Чтобы перезагрузить такой сценарий в (только что созданную) базу данных с именем newdb :

$ psql -d newdb -f db.sql

Чтобы выгрузить базу данных в архивный файл произвольного формата:

$ pg_dump -Fc mydb > db.dump

Чтобы выгрузить базу данных в архив в формате каталога:

$ pg_dump -Fd mydb -f dumpdir

Чтобы перезагрузить архивный файл в (только что созданную) базу данных с именем newdb:

$ pg_restore -d newdb db.dump

Из pg_restoreдокументации:

Примеры

Предположим, мы сбросили базу данных с именем mydb в файл дампа нестандартного формата:

$ pg_dump -Fc mydb > db.dump

Чтобы удалить базу данных и воссоздать ее из дампа:

$ dropdb mydb
$ pg_restore -C -d postgres db.dump
Зелёный
источник
2
когда я делаю pg_restore, я получаю pg_restore: [архиватор] входной файл выглядит как дамп текстового формата. Пожалуйста, используйте psql.
Haseeb Ahmad
Какой я использую для восстановления БД?
Haseeb Ahmad
67
это не ответ на вопрос
dopatraman
1
для восстановления из текстового файла checkout serverfault.com/questions/260607/…
chrs
5
ИМО, в этом посте слишком много деталей, что затрудняет ответ. Автор не указал, что в документации pg_dump для параметра '-F' не говорится, что формат по умолчанию ('p' / 'plain') подходит для pg_restore. pg_restore требует, чтобы pg_dump использовался с форматами 'c', 'd' или 't'.
Мэтт
59

Ответ выше не сработал для меня, это сработало:

psql db_development < postgres_db.dump

Узиэль Вальдес
источник
Коротко и мило. У меня тоже работало.
Ученик
11

Для меня, когда я пытаюсь восстановить с удаленного хоста, я использовал

psql -U username -p 5432 -h 10.10.10.1 -d database < db.dump

работал нормально. А если не удаленно, то работала только следующая команда.

psql -d database < db.dump
Церенямц
источник
7

Чтобы создать резервную копию с использованием pg_dump, совместимого с, pg_restoreвы должны использовать --format=custom/ -Fcпри создании дампа.

Из документов:

Выведите архив нестандартного формата, подходящий для ввода в pg_restore.

Итак, ваша pg_dumpкоманда может выглядеть так:

pg_dump --file /tmp/db.dump --format=custom --host localhost --dbname my-source-database --username my-username --password

И ваша pg_restoreкоманда:

pg_restore --verbose --clean --no-acl --no-owner --host localhost --dbname my-destination-database /tmp/db.dump
Тим Флетчер
источник
6

Для меня это работает так. C: \ Program Files \ PostgreSQL \ 12 \ bin> psql -U postgres -p 5432 -d dummy -f C: \ Users \ Downloads \ d2cm_test.sql

РАДЖНИШ ЯДАВ
источник
2
Простой и полезный ответ!
Ракс Вебер,
1
Спасибо, @RAJNISH YADAV.
Амит
0

если вы используете pg_dump с -Fp для резервного копирования в текстовом формате, используйте следующую команду:

cat db.txt | psql dbname

скопировать все данные в вашу базу данных с именем dbname

M2E67
источник
0

Если у вас полный дамп БД:

PGPASSWORD="your_pass" psql -h "your_host" -U "your_user" -d "your_database" -f backup.sql

Однако если у вас есть схемы, хранящиеся отдельно, это не сработает. Затем вам нужно отключить триггеры для вставки данных, аналогичные pg_restore --disable-triggers. Затем вы можете использовать это:

cat database_data_only.gzip | gunzip | PGPASSWORD="your_pass" psql -h "your_host" -U root "your_database" -c 'SET session_replication_role = replica;' -f /dev/stdin

Кстати, я считаю, что это очень неприятный недостаток postgres. Способ создания дампа по умолчанию pg_dumpнесовместим с pg_restore. Однако с некоторыми дополнительными клавишами это возможно. Какого черта?

Василий Новиков
источник