插入冲突更新

时间:2020-08-22 12:09:31

标签: postgresql

我有两个具有不同值的相似表:

users_groups_old

user_id | group_id | rating | registered
----------------------------------------
1       | 1        | 1      |
1       | 2        | 2      |
2       | 2        | 3      |

users_groups

user_id | group_id | rating | registered
----------------------------------------
1       | 1        | 10     |
1       | 2        | 20     |

如果行已存在,我想“合并”两个表或对等级求和。 最后,我要获取下表(表键为:user_id + group_id):

users_groups

user_id | group_id | rating | registered
----------------------------------------
1       | 1        | 11     |
1       | 2        | 22     |
2       | 2        | 3      |

我尝试了以下操作

insert into users_groups
select *
from users_groups_old
on conflict (user_id, group_id)
do update
  set rating = users_groups.rating + excluded.rating;

但是得到了错误

SQL Error [42P10]: ERROR: there is no unique or exclusion constraint matching the ON CONFLICT specification

我不明白我在做什么错?

1 个答案:

答案 0 :(得分:0)

数据库似乎无法识别(user_id, group_id)的唯一约束。请检查定义是否正确,然后尝试直接使用约束名称:

...
on conflict on constraint <constraint name>
...
相关问题