【发布时间】:2016-07-18 17:02:00
【问题描述】:
我有一张桌子
CREATE TABLE foo
(
f0 int,
time_stamp timestamp,
CONSTRAINT foo_pk PRIMARY KEY (f0)
)
我需要大量写入此表,因此性能是关键。有时,我会写一条具有f0 现有值的记录,并将time_stamp 更新为当前时间。为此,我使用ON CONFLICT..DO UPDATE 子句。
问题是我需要知道是INSERT还是UPDATE。
我虽然使用第二个is_update 列。插入时,插入false和
`ON CONFLICT .. DO UPDATE set is_update=true`
然后使用RETURNING is_update 得到我想要的。问题在于引入了一个与数据本身无关的附加列。
【问题讨论】:
-
@lad2025 之前没找到这个问题,谢谢。但是,建议的解决方案是我所说的我已经尝试过的,但我想避免,因为我的表中的附加列用于我认为此
UPSERT / ON CONFLICT功能中缺少的某些功能。 -
对于遇到此问题的任何人,我强烈建议您查看 LukaszSzozda 和 klin 的这些 cmets 中链接的其他两个答案。 Sagi 的评论不正确,无需在表格中添加一列即可使用这些答案。
标签: sql postgresql upsert postgresql-9.5