违反唯一约束会导致整个 pq.CopyIn postgresql 导入失败

Posted

技术标签:

【中文标题】违反唯一约束会导致整个 pq.CopyIn postgresql 导入失败【英文标题】:unique constraint violation causes entire pq.CopyIn postgresql import to fail 【发布时间】:2018-11-16 19:52:35 【问题描述】:

我正在尝试使用 pq.CopyIn 进行批量导入,如下所述:

https://godoc.org/github.com/lib/pq

导入比我尝试过的其他方法快得多,但我发现仅在一条记录中违反唯一约束将导致整个导入失败。

有没有办法改变这种行为? 是否有一些简单的方法可以找出导致问题的记录? 有没有比 pq.CopyIn 更好的选择来快速导入?

对于我的应用程序,我可以对我正在导入的数据进行一些查询和检查,但我希望有更好的方法。

【问题讨论】:

【参考方案1】:

错误消息应该会为您提供问题所在的线索。

由于COPY 语句(与所有 SQL 语句一样)在其自己的事务中运行,因此单个错误将回滚整个工作。

如果您愿意忍受较慢的处理速度,可以求助于INSERT ... ON CONFLICT DO NOTHING

【讨论】:

错误消息是pq: duplicate key value violates unique constraint。没有迹象表明哪条记录失败了。 看起来像 pq 隐藏了错误消息的上下文和其他细节。

以上是关于违反唯一约束会导致整个 pq.CopyIn postgresql 导入失败的主要内容,如果未能解决你的问题,请参考以下文章

将数据从Json文件加载到Postgresql会导致:错误“重复键值违反唯一约束 - 已存在”。

Postrgersql+Django:NULL值导致IntegrityError:重复键值违反唯一约束

Hibernate 两次将数据插入到 Join Table 中,导致 Spring Boot 项目中出现“ORA-00001:违反唯一约束”

oracle数据导入时,提示违反唯一约束性?

在oracle sql中违反了PK

勺子插入 postgres 会产生“重复键值违反唯一约束”