Howto pg_restore

Я сбрасываю мою базу данных 'mydatabase' в текстовый файл 'mydatabase.sql' через командную строку.

"C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_dump.exe " --host localhost --port 5432 --username "postgres" --no-password --verbose --file "C:\Users\User 1\Desktop\mydatabase.sql" "mydatabase"

Это хорошо. Но после многих попыток я не могу сделать pg_restore эти файлы обратно в базу данных с данными.
Но если я удалю все таблицы в этой базе данных, я могу сделать это с помощью:

psql -f "C:\Users\User 1\Desktop\mydatabase.sql" "mydatabase" "postgres"

Это восстановление всех данных. Проблема в том, что я не могу запускать pgsl через VBNET/shell, поэтому мне больше нужно pg_restore.exe Это моя попытка:

"C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_restore.exe " -i -h localhost -p 5432 -U postgres -d "mydatabase" -v "C:\Users\User 1\Desktop\mydatabase.sql"

... где я получаю сообщение:

C:\Users\User 1 > "C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_restore.exe" -i -h localhost -p 5432 -U postgres -d "mydatabase" -v "C:\Users\User 1\Desktop\mydatabase.sql" недействительный двоичный файл "C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_restore.exe" pg_restore.exe: входной файл [архиватор] не является допустимым архивом

Перед попыткой восстановления у меня есть пустая база данных "mydatabase" на сервере (без таблиц). Пожалуйста, помогите, чтобы pg_restore работал с 'mydatabase.sql', который сбрасывается с pg_dump и который, очевидно, содержит правильные данные, поэтому я могу использовать его через чистую командную строку или VBNET/shell.

Ответ 1

В вашем pg_dump укажите флаг -F t. Это сообщает pg_dump создать резервную копию в формате tar, который подходит для восстановления через pg_restore.

"C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_dump.exe " --host localhost --port 5432 --username "postgres" --no-password --verbose -F t --file "C:\Users\User 1\Desktop\mydatabase.sql" "mydatabase"