检测行是否已更新或插入
Detect if the row was updated or inserted
我正在使用 java 对 postgres 进行 INSERT
和 ON CONFLICT
。有什么方法可以查明 executeUpdate
是插入行还是更新行?
你可以看看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 *, <b>(xmax = 0) AS inserted</b>;
这是建立在一个未记录的实施细节的基础上的,该实施细节可能会在未来的版本中发生变化(即使不太可能)。它适用于 Postgres 9.5 和 9.6。
它的优点:您不需要引入额外的列。
详细解释:
我正在使用 java 对 postgres 进行 INSERT
和 ON CONFLICT
。有什么方法可以查明 executeUpdate
是插入行还是更新行?
你可以看看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 *, <b>(xmax = 0) AS inserted</b>;
这是建立在一个未记录的实施细节的基础上的,该实施细节可能会在未来的版本中发生变化(即使不太可能)。它适用于 Postgres 9.5 和 9.6。
它的优点:您不需要引入额外的列。
详细解释: