Назад | Перейти на главную страницу

Резервное копирование / восстановление PostgreSQL

Какой лучший способ сделать резервную копию базы данных postgresql?

Я пробовал использовать документацию на www.postgresql.org, но при восстановлении всегда получаю ошибки целостности.

Прямо сейчас я использую это для резервного копирования:

pg_dump -U myuser -d mydatabase db.pg.dump

для восстановления:

pg_restore -c -r -U myuser -d mydatabase db.pg.dump

Но я не получаю желаемых результатов ..

Изменить: я должен отметить, что у моего БД много внешних ключей ..

Вот некоторые из ошибок, которые я вижу:

ERROR:  current transaction is aborted, commands ignored until end of transaction block

ERROR:  zero-length delimited identifier at or near """"
LINE 1: ..._text_id_fkey" FOREIGN KEY ("text_id") REFERENCES ""."wiki_t...

со страницы руководства pg_restore:

pg_restore - это утилита для восстановления базы данных PostgreSQL из архива, созданного pg_dump (1), в одном из непростых текстовых форматов.

со страницы руководства pg_dump:

Дампы могут выводиться в формате скрипта или архива. Дампы сценариев - это текстовые файлы, содержащие команды SQL, необходимые для восстановления базы данных до состояния, в котором она находилась на момент сохранения. Чтобы выполнить восстановление из такого сценария, загрузите его в psql (1). Файлы сценариев можно использовать для восстановления базы данных даже на других машинах и других архитектурах; с некоторыми изменениями даже в других продуктах баз данных SQL.

Альтернативные форматы архивных файлов должны использоваться с pg_restore (1) для восстановления базы данных. Они позволяют pg_restore выбирать, что восстанавливается, или даже изменять порядок элементов перед восстановлением.

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

На странице руководства pg_dump:

EXAMPLES
   To dump a database called mydb into a SQL-script file:

   $ pg_dump mydb > db.sql

   To reload such a script into a (freshly created) database named newdb:

   $ psql -d newdb -f db.sql

   To dump a database into a custom-format archive file:

   $ pg_dump -Fc mydb > db.dump

   To reload an archive file into a (freshly created) database named newdb:

   $ pg_restore -d newdb db.dump