14

我通过命令行将我的数据库“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" 无效二进制 "C:/Program Files (x86)/PostgreSQL/9.1/bin/pg_restore.exe " pg_restore.exe : [archiver] 输入文件似乎不是有效的存档

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

4

1 回答 1

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"
于 2012-12-04T13:44:05.443 回答