PostgreSQL:从转储中恢复数据库-语法错误

29

我正在尝试通过执行pg_dump创建的SQL语句,在一个空数据库中恢复PostgreSQL数据库。

但是我遇到了这个错误:

ERROR:  syntax error at or near "\"
LINE 5211: \.

第5210和5211行代码如下:

COPY auth_group (id, name) FROM stdin;
\.

在我的Linux服务器上,我使用以下命令:

psql -U dbname < dumpfile.sql

这个命令可以正常工作。但是在Windows上,我不确定该如何做到同样的效果,所以我一直在尝试从pgAdminIII查询工具中运行dump文件的SQL语句。

有没有推荐的方法来从Windows上导入数据库?或者说,如何解决语法问题?

非常感谢任何帮助!

Martin

3个回答

76

-f 文件名 参数在 psql 命令中会将文件读入,因此您无需使用管道输入。在 Windows 中,psql 应该包含在 PostgreSQL 的 bin 目录中。例如:

psql -d dbname -U username -f dumpfile.sql

如果你的psql可执行文件不在路径中,可能需要包含完整路径,并且在psql后面加上“.exe”,即“psql.exe”。

另外,请确保你不会降低版本号,因为我之前遇到过语法问题(例如,不要将8.4数据库导出并尝试加载到8.1数据库中)。如果是这样的话,你可能需要手动编辑转储文件。


1
当我尝试使用Navicat导入一个抛出各种语法错误的转储时,这对我很有效。从OS X的终端运行也可以正常工作。 - Tim Fletcher

29

尝试使用psql -d dbname -U user -f dumpfile.sql。


1

我认为这个语法错误有时是一个误导。如果你的转储文件存在其他问题,或者复制命令本身有问题,psql 可能会忽略 COPY 的开始(因为出现了错误),然后以下语法只在 COPY 中有效,因此当开始被忽略时,就会导致语法错误。

检查引用的错误是否是遇到的 第一个 错误;如果不是,请先尝试解决所有其他错误。


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