PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)
参考PostgreSQL 批量插入&更新数据时报错(ERROR: ON CONFLICT DO UPDATE command cannot affect row a second time)_张志翔的博客-CSDN博客了解pg批量插入数据主键冲突的更新数据的基本原理,就是插入的数据不能有两条以上存在主键冲突,因为插入数据是无序的,pg无法判断哪一条数据是最新的,事情交给用户自己处理====
了解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表名顺序严格保持一致,不然会出现莫名其妙的报错
方法总比问题多,问题有时候没有看起来那么复杂,有时候很简单
更多推荐
所有评论(0)