如何pg_restore

时间:2012-12-04 13:35:04

标签: postgresql backup 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"

Thas'好转。 但经过多次尝试后,我无法将这些文件pg_restore用数据写回数据库 但是,如果删除此数据库中的所有表,我可以使用:

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

这可以恢复所有数据。 问题是我无法通过VBNET / shell运行pgsl所以我宁愿需要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:[archiver]输入文件似乎不是有效的存档

在尝试恢复之前,我在服务器上有空数据库'mydatabase'(没有表)。 请帮助pg_restore使用'mydatabase.sql',它与pg_dump一起转储,显然包含正确的数据,所以我可以通过纯命令行或VBNET / shell使用它。

1 个答案:

答案 0 :(得分:12)

在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"