我正在尝试恢复我的转储文件,但是出现了错误:
psql:psit.sql:27485: invalid command \N
有解决方案吗?我搜索过,但没有得到明确的答案。
我正在尝试恢复我的转储文件,但是出现了错误:
psql:psit.sql:27485: invalid command \N
有解决方案吗?我搜索过,但没有得到明确的答案。
Postgres使用\N
作为空值的替代符号,但所有psql命令都以反斜杠\
符号开头。当COPY语句失败但转储加载继续时,您可以获得这些消息。此消息是一个虚警。如果您想查看COPY语句失败的真实原因,则必须搜索此错误之前的所有行。
是否可以将psql切换到“停止在第一个错误”模式并找到错误:
psql -v ON_ERROR_STOP=1
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
pg_restore --table=orders full_database.dump > orders.dump
)orders.dump
并删除一些记录)今天我也遇到了同样的问题。我使用 --inserts 命令来处理这个问题。
我的做法是:
1)使用带有 inserts 的 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 -U your_user your_db < your.file.here.sql 2>&1|more
这样我就可以阅读错误信息。
希望这能帮助其他人。
pg_dump -a -t table_name > dump.sql
psql < dump.sql
(当然在更新正确的环境变量之后)。 我最终发现的是,这个转储虽然是 data-only
类型(选项 -a
,因此表结构不是转储的显式部分),但是特定于架构的。 这意味着如果不手动修改转储,则不能使用从 schema1.table_name
生成的转储来填充 schema2.table_name
。 手动修改转储很容易,在前15行左右指定了模式。如果有帮助的话,我想分享我的解决方案。我安装了postgis但错误没有得到解决。由于我需要复制包含数千行表的大型模式,所以--inserts选项并不可行。在同一数据库中,当在mac上运行pg_dump和psql(恢复)时,我没有看到这个问题。但是,当在linux机器上运行pg_dump并将转储文件复制到mac后尝试进行还原时,出现了问题。因此,我在VSCode中打开了转储文件。它检测到异常的行终止符并给出了删除它们的选项。在执行此操作后,转储文件恢复时就没有出现无效命令\N错误。
create table...
失败,但加载仍在继续。 - JaakL