如何使用pg_restore

16

我正在通过命令行将我的数据库'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"

这将恢复所有的数据。 问题是我无法通过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" invalid binary "C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_restore.exe " pg_restore.exe : [archiver] input file does not appear to be a valid archive

在尝试恢复之前,我在服务器上有一个空的名为“mydatabase”的数据库(没有表)。 请帮忙让pg_restore可以使用'pg_dump'生成的包含正确数据的'mydatabase.sql'文件,以便我可以通过纯命令行或VBNET / shell使用它。

1个回答

13

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接