还原sql时psql命令无效\N

还原sql时psql命令无效\N,sql,postgresql,dump,Sql,Postgresql,Dump,我正在尝试还原转储文件,但它导致了一个错误: psql:psit.sql:27485: invalid command \N 有解决办法吗?我搜索了,但没有得到明确的答案。Postgres使用\N作为空值的替换符号。但所有psql命令都以反斜杠符号开头。当copy语句失败,但dump的加载仍在继续时,您可以获得这些消息。此消息是错误警报。如果要查看COPY语句失败的真正原因,必须搜索此错误之前的所有行 可以切换psql以在第一个错误模式下停止并查找错误: psql -v ON_ERROR_ST

我正在尝试还原转储文件,但它导致了一个错误:

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

有解决办法吗?我搜索了,但没有得到明确的答案。

Postgres使用\N作为空值的替换符号。但所有psql命令都以反斜杠符号开头。当copy语句失败,但dump的加载仍在继续时,您可以获得这些消息。此消息是错误警报。如果要查看COPY语句失败的真正原因,必须搜索此错误之前的所有行

可以切换psql以在第一个错误模式下停止并查找错误:

psql -v ON_ERROR_STOP=1

我过去也遇到过这个错误。Pavel是正确的,这通常是pg_restore创建的脚本中的某些内容失败的迹象。由于所有的/N错误,您在输出的最顶端看不到真正的问题。我建议:

插入单个小表,例如pg_restore -表=订单已满\u database.dump>orders.dump 如果没有一个小的,那么从恢复脚本中删除一组记录-我只是确保./是最后一行要加载,例如,open orders.dump和delete一组记录 观察标准输出,一旦你发现问题,你总是可以放弃 打开桌子,重新装填
在我的例子中,我还没有安装hstore扩展,所以脚本在最顶端失败了。我在目标数据库上安装了hstore,然后又恢复了业务。

我在尝试从二进制pg_转储还原时收到了相同的错误消息。我只是使用pg_restore来恢复我的转储,并完全避免了错误,例如

pg_restore-c-F t-F your.backup.tar

开关说明:

-f, --file=FILENAME      output file name
-F, --format=c|d|t       backup file format (should be automatic)
-c, --clean              clean (drop) database objects before recreating

根据我最近的经验,当真正的问题与转义字符或换行符无关时,可能会出现这种错误。在我的例子中,我已经用 pg_dump-a-t表_name>dump.sql 并试图用 当然,在更新适当的环境变量之后,psql我最终得出的结论是,转储虽然只是数据-a选项,因此表结构不是转储的显式部分,但它是特定于模式的。这意味着如果不手动修改转储,我就无法使用从schema1.table_name生成的转储来填充schema2.table_name。手动修改转储很容易,模式是在前15行左右指定的。

您可以使用INSERTS语句和-INSERTS参数生成转储。

我知道这是一篇旧文章,但我遇到了另一个解决方案:我的新版本上没有安装postgis,这导致我在pg_dump上出现相同的错误安装postgresql您的版本postgis脚本大多数时候,解决方案是安装postgres contrib软件包。

对于我在SUSE 12上使用postgresql 10,我通过增加磁盘空间解决了无效命令错误。磁盘空间不足是导致我出错的原因。如果查看df-h输出中的数据将要存储的文件系统,就可以判断磁盘空间是否不足。如果文件系统/mount的使用率达到100%,那么在执行psql-f db.out postgres之类的操作后,您可能需要增加可用磁盘空间。

今天我也遇到了同样的情况。我通过使用-inserts命令转储来处理这个问题

我所做的是:

1个带插入件的pg_转储:

pg_dump dbname --username=usernamehere --password --no-owner --no-privileges --data-only --inserts -t 'schema."Table"' > filename.sql
2 psql恢复转储的文件

psql "dbname=dbnamehere options=--search_path=schemaname" --host hostnamehere --username=usernamehere -f filename.sql >& outputfile.txt
注意-1确保添加outputfile将提高导入速度


注意-2在使用psql导入之前,不要忘记使用完全相同的名称和列创建表

我也遇到了同样的问题,我创建了一个新数据库,但在使用psql进行还原时\N收到了无效的命令。 我通过使用旧数据库设置相同的表空间解决了这个问题


例如,旧数据库备份有表空间pg_default,我为新数据库定义了相同的表空间,上面的错误已经消失了

我遵循了所有这些示例,它们都失败了,出现了我们正在讨论的错误:

使用-C的语法起作用,请参见此处:

pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"
此外,如果两个数据库之间存在不同的模式,我发现更改一个数据库的模式以匹配其他数据库的模式是表副本正常工作所必需的,例如:

我的解决办法是:

psql -U your_user your_db < your.file.here.sql  2>&1|more
这样我就可以读取错误消息


我希望这对任何人都有帮助。

对我来说,编码和语言环境与源数据库不同。
一旦我删除了目标数据库并重新创建了它,它就工作得很好。

是的,很容易犯错误,因为这些无效命令错误的数量可能非常大,完全掩盖了早期出现的第一个错误。PostgreSQL给出这样一个误导性的警告是非常邪恶的,您的回答为我节省了很多时间@Tregoreg-是的,它不友好-您可以在第一次出错时停止模式下运行psql。它简化了诊断psql-v ON_ERROR_STOP=1,例如创建表格时可能发生。。。开始时失败,但加载仍在继续。我来这里也是因为同样的原因
错误我想到的是:pg|U恢复…|psql。。。2> &1 |这对我来说太有用了!pg_dump-inserts$DATABASE>$filename也大大降低了cpu使用率,不是吗?我还没有安装hstore扩展,TNX。真是个救命稻草!太棒了,谢谢
psql -U your_user your_db < your.file.here.sql  2>&1|more