我正在尝试还原我的转储文件,但是它导致了错误:
psql:psit.sql:27485: invalid command \N
有解决方案吗?我进行了搜索,但没有得到明确的答案。
Postgres使用“ \ N”作为NULL值的替代符号。但是所有psql命令都以反斜杠“ \”符号开头。因此,当copy语句可能失败但转储继续加载时,您可以获得此消息。此消息仅是错误警报。您必须先搜索一行以了解COPY语句失败的原因。
可以将psql切换到“在第一个错误时停止”模式并查找错误:
psql -v ON_ERROR_STOP=1
对于我来说,在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)之后,您可能需要增加可用磁盘空间。
我有同样的问题,我创建了一个新数据库,并在使用psql进行还原时得到了invalid command \N
。我通过设置与旧数据库相同的表空间来解决它。
例如,旧的数据库备份具有表空间“ pg_default”,我为新数据库定义了相同的表空间,并且上面的错误消失了!
当尝试从二进制转储中还原时,出现相同的错误消息。我只是使用pg_restore
恢复了我的转储,并完全避免了\N
错误,例如
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
我知道这是一个旧帖子,但是我遇到了另一个解决方案:在新版本中未安装postgis,这导致了pg_dump上的相同错误
我过去也遇到过此错误。 Pavel是正确的,通常表明pg_restore创建的脚本中的某些操作失败。由于存在所有“ / N”错误,因此您不会在输出的最顶部看到真正的问题。我建议:
pg_restore
--table=orders full_database.dump > orders.dump
)orders.dump
并删除一堆记录)就我而言,我尚未安装“ hstore”扩展名,因此脚本在最顶层失败。我在目标数据库上安装了hstore,然后又重新营业。
您可以使用带有--inserts参数的INSERTS语句生成转储。
安装postgresql-(您的版本)-postgis-脚本
今天我发生了同样的事情。我通过使用--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
Note-1)确保添加输出文件将提高导入速度。
Note-2)在使用psql导入之前,请不要忘记创建名称和列完全相同的表。
根据我最近的经验,当真正的问题与转义字符或换行符无关时,可能会出现此错误。就我而言,我是从数据库A创建一个转储的pg_dump -a -t table_name > dump.sql
并试图将其还原到数据库Bpsql < dump.sql
(当然,在更新了正确的环境变量之后)我最终弄清楚的是,转储虽然是data-only
(-a
选项,所以表结构不是明确地属于转储的一部分),但它是特定于模式的。这意味着,如果不手动修改转储,就无法使用从schema1.table_name
生成的转储来填充schema2.table_name
。手动修改转储很容易,该模式在前15行左右指定。
大多数情况下,解决方案是安装postgres-contrib
软件包。