我正在通过命令行将数据库“my database”转储到文本文件“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_将这些文件还原到数据库中。
但如果我删除数据库中的所有表,我可以使用:
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:“用户\用户1>”C:“程序文件(x86)/PostgreSQL/9.1/bin/pg_restore.exe”-i-h
localhost-p 5432-U postgres-d“mydatabase”-v“C:\用户\用户1\Desktop\mydatabase.sql”
无效的二进制“C:/程序文件(x86)/PostgreSQL/9.1/bin/pg_restore.exe”
pg_restore.exe:[archiver]输入文件似乎不是有效的存档文件
在尝试还原之前,服务器上的数据库“mydatabase”为空(没有表)。
请帮忙让pg_restore使用'mydatabase.sql',它是用pg_dump转储的,显然包含正确的数据,所以我可以通过纯命令行或VBNET/shell使用它。

最佳答案

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

09-04 05:14