我有一个来自 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 直接连接到数据库进行恢复。