目录
一、背景
二、定位问题
三、解决方案
四、后续坑
五、总结
一、背景
使用datax postgresqlwriter组件upsert数据时报错
error:there is no unique or exclusion constraint matching the ON CONFLICT specification
datax 自定义json postgresqlwriter中json新增writeMode
代码语言:javascript复制"writeMode": "update (id)"
二、定位问题
原来是因为pg5.0以上的版本的新特性,根据约束,存在才更新,不存在则插入,而且字段属性必须是unique,否则还会报错
三、解决方案
--为pg目标表添加约束
ALTER TABLE public.pg_table_name
ADD constraint "upsert_pkey" unique (id);
注意:unique中字段可以为多个
四、后续坑
本来以为到这里已经解决了,结果又发现了新坑。。。
加完约束后在执行居然又报错 null value in column "col_name" violates not-null constraint
我竟无语凝噎,然后又去将pg表所有字段给了默认值,才成功了。
五、总结
最后总结一下,约束加不加我测试了都无所谓,但是所有字段都必须要设定默认值,这个配好之后uodate模式就能执行成功了!!!