ON CONFLICT DO UPDATE命令无法再次影响行

在使用POSTGRESQL时遇到ON CONFLICT DO UPDATE命令无法再次影响行的错误,问题源于数据重复且表有唯一约束。解决方案是修改约束,加入更多字段以区分重复记录,例如创建联合主键。此问题可能影响Java、Spring Boot和Mybatis等使用PG数据库的应用。
摘要由CSDN通过智能技术生成

PG数据库插入或更新操作报如下错误:

org.postgresql.util.PSQLException: 错误: ON CONFLICT DO UPDATE命令无法再次影响行
  建议:确保在具有重复受约束值的同一个命令中不会插入行。

场景:插入数据,数据已存在则更新。

        Insert into test_Table(id, name, key, servicename,talk_time)
        values
        <foreach collection="entities" item="entity" separator=",">
            (#{entity.id}, #{entity.name}, #{entity.key}, #{entity.servicename},
            #{entity.TalkTime})
        </foreach>
        on conflict ON CONSTRAINT test_table_pk do update set
        id = excluded.id,
        name = excluded.name,
		key = excluded.key,
		servicename = excluded.servicename,
		talk_time = excluded.talk_time

原因:我所遇到的问题是数据有重复,但表的数据要求是不能有两条完全一样的记录,所以表的唯一约束导致报错。

解决办法:

在PG数据库找到   test_table_pk(你的约束名_pk)   这个约束,然后在此基础上追加其他可以作为区别重复记录的字段加进去(如果不能直接追加就删除后重建时再加上),便可解决。

延伸阅读:联合主键

希望对你有帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值