参考PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)_张志翔的博客-CSDN博客  

了解pg批量插入数据主键冲突的更新数据的基本原理,就是插入的数据不能有两条以上存在主键冲突,因为插入数据是无序的,pg无法判断哪一条数据是最新的,事情交给用户自己处理

===========================分割==========================================

1.我的做法是先通过groupby去掉重复数据,测试环境去重80条左右

2.还有报错,发现插入数据集的字段比pg表字段少若干个,修正pg表结构,和插入数据集一致

新的报错

3.ERROR: null value in column "* ***” violates not-null constraint

 很熟悉对不对,是的 插入对应的列中有null值,与主键不能为null冲入,但是你会发现给的样例数据里对应的字段值不是null

重点来了,pg在插入数据的时候不会根据字段名去插入到pg表对应的列,就是说一字排开,不管三七二十一,直接插入,不管是不是对应的字段

最终挑中表结构字段顺序

问题解决

注:如果采用insert into  tablename select方式,则select后面的字段顺序要与pg表名顺序严格保持一致,不然会出现莫名其妙的报错  

方法总比问题多,问题有时候没有看起来那么复杂,有时候很简单 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐