我试图恢复我的转储文件,但它导致了一个错误:
psql:psit.sql:27485: invalid command \N
有解决办法吗?我找了,但没有得到明确的答案。
Postgres使用\N作为NULL值的替代符号。但是所有psql命令都以反斜杠\符号开始。当复制语句失败,但转储的加载仍在继续时,您可以获得这些消息。这条消息是假警报。如果希望看到COPY语句失败的真正原因,则必须搜索此错误之前的所有行。
\N
\
是否可以将psql切换为“第一次错误就停止”;模式和查找错误:
psql -v ON_ERROR_STOP=1
我过去也遇到过这种错误。Pavel是正确的,这通常是pg_restore创建的脚本中某些东西失败的标志。由于所有的“/N”错误,您在输出的顶部看不到真正的问题。我建议:
pg_restore . 0) ——表full_database =订单。转储祝辞订单。Dump
orders.dump
在我的情况下,我还没有安装“hstore”扩展,所以脚本在顶部失败。我在目标数据库上安装了hstore,然后就可以继续工作了。
当我试图从二进制pg_dump恢复时,我收到了相同的错误消息。我简单地使用pg_restore来恢复我的转储,并完全避免了\N错误,例如。
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 table_name > dump.sql
psql < dump.sql
data-only
-a
schema1.table_name
schema2.table_name
可以使用INSERTS语句和——INSERTS参数生成转储。
我知道这是一个旧帖子,但我遇到了另一个解决方案:postgis没有安装在我的新版本上,这导致我在pg_dump上出现同样的错误
安装postgresql-(你的版本)-postgis-scripts
大多数情况下,解决方案是安装postgres-contrib包。
postgres-contrib
对于我来说,在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)的操作后,您可能需要增加可用的磁盘空间。
invalid command \N
df -h
psql -f db.out postgres
今天我也遇到了同样的事。我通过使用——inserts命令转储来处理问题。
我所做的是:
1) pg_dump插入:
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恢复时得到invalid command \N。 我通过设置与旧数据库相同的表空间来解决这个问题
例如,旧数据库备份有表空间“pg_default”,我给新数据库定义了相同的表空间,上面的错误已经消失了!
我遵循了所有这些例子,它们都失败了,出现了我们正在谈论的错误:
在Postgres中将一个表从一个数据库复制到另一个数据库
有效的是- c的语法,参见这里:
pg_dump -C -t tableName "postgres://$User:$Password@$Host:$Port/$DBName" | psql "postgres://$User:$Password@$Host:$Port/$DBName"
此外,如果两者之间有不同的模式,我发现改变一个dB的模式以匹配其他的表副本是必要的,例如:
DROP SCHEMA public; ALTER SCHEMA originalDBSchema RENAME TO public;
我的解决办法是:
psql -U your_user your_db < your.file.here.sql 2>&1|more
这样我就可以读取错误消息
我希望这能对大家有所帮助。
对我来说,这是与源数据库不同的ENCODING和LOCALE。 一旦我删除了目标DB并重新创建它,它就可以正常工作
在我的例子中,问题是在我的目标计算机上缺少磁盘空间。简单地增加本地存储为我解决了它。
希望这能帮助到一些人;)
加上我的决心,希望能帮助到任何人。我安装了postgis,但错误没有解决。——inserts选项是不可行的,因为我必须复制一个包含数千行表的大模式。对于同一个数据库,当pg_dump和psql(还原)在mac上运行时,我没有看到这个问题。但是当pg_dump在linux机器上运行时,转储文件复制到mac并尝试还原。所以我在VSCode中打开了转储文件。它可以检测到不寻常的行终止符,并给出删除它们的选项。这样做之后,转储文件恢复运行没有无效的命令\N错误。
检查表中的列和备份文件中的列是否合适