R调用Postgres的dbx库dbxUpsert函数报重复约束错误求助
报错原因
该报错是由于你传入同步操作的required_info dataframe内部存在重复的opportunity_id值,同一批次写入请求里出现了多条主键相同的记录,PostgreSQL无法判定冲突时应该以哪条记录为准执行更新,因此触发错误。
解决方案
按照你的需求(已有条目直接忽略,不做更新),可按以下两步操作:
- 第一步:先对同步的dataframe按主键去重,避免同一批次内出现重复主键的记录,可根据你的业务需求调整去重时的保留规则:
# 示例:按主键opportunity_id去重,保留最后出现的条目 required_info <- required_info[!duplicated(required_info$opportunity_id, fromLast = TRUE), ]
- 第二步:调整
dbxUpsert的冲突处理策略为忽略,冲突时直接跳过已有条目,不执行更新:
dbxUpsert(db, table, required_info, where_cols = c("opportunity_id"), conflict_strategy = "ignore")
如果后续你需要调整为已有条目覆盖更新的逻辑,只需要去掉conflict_strategy = "ignore"参数即可,前提是必须先完成主键去重操作,否则依然会触发该报错。
内容的提问来源于stack exchange,提问作者Surajit Shasmal
相关产品推荐
相关产品推荐

