我知道如何使用PostgreSQL的INSERT ON CONFLICT
来更新或不做任何事情。然而,我想实现这样的行为,如果行中指定的数据值相同,则不做任何事情,但如果存在差异,则插入新行,而不是更新现有行。
例如,假设您有一个名为test
的表:
create table test (id text, data text, created_on date);
INSERT INTO public.test (id, data, created_on)
VALUES (1, 'foo', '2023-03-27'::date);
然后,假设我们尝试插入另一行:
(1, 'foo', '2023-03-28'::date)
在这种情况下,因为id
和data
相同,所以忽略它。
但是,假设我们尝试插入另一行
(1, 'bar', '2023-03-28'::date)
现在,data的值已经改变了,但是我不想更新原始行,而是想插入一个新行,所以:
select * from test
应屈服
id | data | created_on
----+------------------
1 | foo | 2023-03-27
2 | foo | 2023-03-28
1条答案
按热度按时间yyyllmsg1#
您需要对要检查冲突的列使用
UNIQUE
约束。然后在
ON CONFLICT
子句中命名这些列: