我有一个像这样的UPSERT操作:
INSERT INTO people (SELECT * FROM people_update)
ON CONFLICT (name,surname)
DO UPDATE SET age = EXCLUDED.age , street = EXCLUDED.street , city = EXCLUDED.city , postal = EXCLUDED.postal
WHERE
(people.age,people.street,people.city,people.postal) IS DISTINCT FROM (EXCLUDED.age,EXCLUDED.street,EXCLUDED.city,EXCLUDED.postal)
RETURNING case when xmax::text::int > 0 then 'updated' else 'inserted' end,name,surname,age,street,city,postal;
(name,surname)
是一个复合主键,people_update
表包含与people
表相比的额外和更改的行。
我的问题是:是否有方法将此查询的插入行和更新行作为返回行?
我通过添加一个RETURNING
子句解决了这个问题,但我也想在返回值中获得旧值。
1条答案
按热度按时间nnsrf1az1#
如果你在
people
表中添加一个布尔更新列:然后,您可以通过在
DO UPDATE SET
子句中设置updated = TRUE
来标识更新的行:比如说
产量
updated
列显示('Sancho', 'Panza')
和('Quasi', 'Modo')
行已更新,('Pinocchio', 'Geppetto')
是一个新的插入。