вхідним файлом видається дамп текстового формату. Будь ласка, використовуйте 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.
Хасіб Ахмад,

Який я використовую для відновлення db?
Хасіб Ахмад,

67
це не відповідає на запитання
dopatraman

1
для способу відновлення з текстового файлу замовлення serverfault.com/questions/260607/…
chrs

5
У цій публікації IMO є занадто багато деталей, що затуманює відповідь. На що автор не вказував, це те, що документація 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


0

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

cat db.txt | psql dbname

скопіювати всі дані у вашу базу даних з ім'ям dbname


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. Однак з деякими додатковими клавішами це так. WTF?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.