【踩坑实录】there is no unique or exclusion constraint matching the ON CONFLICT specification

2022-11-13 13:26:39 浏览数 (1)

目录

一、背景

二、定位问题

三、解决方案

四、后续坑

五、总结


一、背景

使用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模式就能执行成功了!!!

0 人点赞