psql恢复sql时出现无效命令\N

230

我正在尝试恢复我的转储文件,但是出现了错误:

psql:psit.sql:27485: invalid command \N

有解决方案吗?我搜索过,但没有得到明确的答案。

18个回答

2

大多数情况下,解决方案是安装postgres-contrib软件包。


1
我遇到了同样的问题,我创建了一个新的数据库,使用psql还原时出现了“invalid command \N”的错误。 我通过将新数据库设置为与旧数据库相同的表空间来解决了这个问题。
例如,旧的数据库备份使用的是“pg_default”表空间,我将同样的表空间定义给了新的数据库,这个错误就消失了!

1

对我来说,问题在于编码和区域设置与源数据库不同。一旦我删除了目标数据库并重新创建它,问题就得到解决。


1
在我的情况下,问题是目标机器上磁盘空间不足。简单地增加本地存储解决了我的问题。
希望这能帮助到某些人 ;)

1
在Windows上备份后立即尝试还原时,我遇到了这个错误。结果问题是,我使用pg_dump ... > filename将文件写出,这显然会破坏输出。相反,我需要使用pg_dump ... -f filename将文件写出。一旦我用这种方式创建了备份文件,它就可以顺利地恢复了。

0

对于我在SUSE 12上使用postgreSQL 10,我通过增加磁盘空间解决了invalid command \N错误。对我来说,磁盘空间不足导致了这个错误。如果您查看数据所在的文件系统的df -h输出,就可以知道是否磁盘空间已满。如果文件系统/挂载使用率达到100%,那么在执行像psql -f db.out postgres(请参见https://www.postgresql.org/docs/current/static/app-pg-dumpall.html)之类的操作后,您可能需要增加可用的磁盘空间。


0

我按照所有这些例子操作,但它们都以我们所谈论的错误而失败:

在Postgres中从一个数据库复制表到另一个数据库

真正奏效的是使用-C语法,见此处:

pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"

如果两者之间存在不同的模式(Schema),我发现改变一个数据库的模式以匹配另一个数据库是必要的,这样表格复制才能正常工作。例如:
DROP SCHEMA public;
ALTER SCHEMA originalDBSchema RENAME TO public;

-2

检查表中的列和备份文件中的列是否匹配


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