检测行是否已更新或插入

时间:2016-11-30 00:04:53

标签: java sql postgresql upsert

我正在使用INSERT ON CONFLICT使用java进行postgre。有没有办法找出executeUpdate是否插入了行或更新了它?

1 个答案:

答案 0 :(得分:4)

您可以查看system column xmax来区分它们。在这种情况下插入的行是0

CREATE TABLE tbl(id int PRIMARY KEY, col int);
INSERT INTO tbl VALUES (1, 1);
INSERT INTO tbl(id, col)
VALUES (1,11), (2,22)
ON     CONFLICT (id) DO UPDATE
SET    col = EXCLUDED.col
RETURNING *, (xmax = 0) AS inserted;

这是基于未记录的实现细节,可能在将来的版本中发生变化(即使不太可能)。它适用于Postgres 9.5和9.6。

它的美妙之处:您不需要引入额外的列。

详细说明: