首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制大CSV (110百万行)到Postgres 10卡盘,失败时继续

复制大CSV (110百万行)到Postgres 10卡盘,失败时继续
EN

Server Fault用户
提问于 2018-05-10 06:56:54
回答 1查看 5.8K关注 0票数 0

我希望\将大型CSV文件复制到Postgres 10,并且希望从格式错误的行(如额外的引号、预期的额外列)中产生各种类型的错误。

我想运行\COPY命令,如果失败,将写入违规行以进行手动更正。\COPY然后从下一行重新运行,直到新的失败。

最后,将手动更正失败的行,并手动将其添加到表中。

我希望能在这个问题上找到解决方案,必要时结合\COPY和bash脚本。

EN

回答 1

Server Fault用户

回答已采纳

发布于 2018-05-10 18:56:05

Postgresql \copy只是在出错时失败,并中止整个导入。不能选择跳过格式错误的行或无效的列内容。

您需要使用像装载机这样的程序,它构建在复制的基础上,并增加了过滤错误的能力。如其手册中所述:

要将数据加载到PostgreSQL,pgloader使用复制流协议。虽然这是加载数据的更快的方法,但复制有一个重要的缺点:一旦PostgreSQL发出发送给它的任何数据的错误,不管问题是什么,整个数据集都会被PostgreSQL拒绝。为了解决这个问题,pgloader将数据分成25000行,这样当出现问题时,它只会影响那么多行数据。复制流发生时,每个批处理都保存在内存中,以便在发生错误时能够处理错误。当PostgreSQL拒绝整个批处理时,pgloader记录错误消息,然后通过在较小批中重试批行,将坏行(S)与已接受的行隔离开来。为此,pgloader将解析失败副本中的上下文错误消息,因为该消息包含找到错误的...行号。

票数 2
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/911574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档