【问题标题】:Detect if the row was updated or inserted检测该行是否已更新或插入
【发布时间】:2017-04-14 03:59:06
【问题描述】:

我正在使用 java 对 INSERTON CONFLICT 执行 postgres。有什么方法可以查明executeUpdate 是插入了行还是更新了行?

【问题讨论】:

标签: java sql postgresql upsert


【解决方案1】:

您可以查看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。

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

详细解释:

【讨论】:

  • @VaoTsun:谢谢,已修复。
猜你喜欢
  • 2010-11-08
  • 2012-12-06
  • 1970-01-01
  • 2013-04-17
  • 2017-07-21
  • 1970-01-01
  • 2012-05-27
  • 2012-09-02
  • 2011-12-05
相关资源
最近更新 更多