Postgresql db 从转储恢复失败

Postgresql db 从转储恢复失败

我有一个来自 Postgresql db 的转储文件。但是,如果我在 Windows 下运行 psql -U user < db.sql,我会得到

 ERROR:  missing data for column "x"

对于某些行。问题是,“x”的数据没有丢失。我猜“x”之前的列中的某些字符以某种方式破坏了导入,但我不知道它可能是什么。

有什么想法吗?Postgre 版本是 8.3.7

编辑:如果在遇到该行之后恢复过程可以正常继续,那么省略有问题的行也是可以的。

编辑2:看来罪魁祸首是转储中的 Ctrl-Z 字符(ascii 26),它们在 Windows 下被解释为文件结束(?)。

答案1

您是否尝试过使用标志传递文件-f而不是重定向输入?也许您的控制台的重定向行为很奇怪:

psql -U user -f db.sql

考虑到它是在 Windows 上,如果出现这种情况我不会感到惊讶。

答案2

字符不应该有问题 - 如果成功导出,则导入应该没问题。您是否还需要旧数据库服务器的架构?

如果你查看转储文件,你能找到阻塞的那一行吗?那里有什么奇怪的东西吗?

答案3

我无法从 .sql 转储中恢复(出现同样的错误),因为我的转储没有正确完成(生成转储时出现错误,但不知何故我没有注意到它们)。因此,请务必仔细检查您是否有有效的转储文件!

答案4

尝试以自定义格式(-Fc)转储,然后使用 pg_restore 直接连接到数据库进行恢复。

相关内容