我在做一个INSERT用ON CONFLICT用java Postgres的。有什么方法可以确定是executeUpdate插入行还是更新行?
INSERT
ON CONFLICT
executeUpdate
您可以查看“系统”列xmax来说明不同之处。0在这种情况下,它用于插入的行。
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。
它的优点:您无需引入其他列。