我正在尝试upsert一个查询。 (如果不存在则基本插入或如果已存在值则更新)。 Postgres:9.3.5
这是我的表:
box=> \d timeranges
Table "ana.timeranges"
Column | Type | Modifiers
--------+------+-----------
value | text |
我只想更新'value'列。(如果条目存在或创建新条目)
我正在按照本指南编写upsert查询:
这是我的疑问:
WITH upsert AS (UPDATE timeranges SET value=value WHERE value='abc' RETURNING *)
INSERT INTO timeranges (value) SELECT 'abc' WHERE NOT EXISTS (SELECT * FROM upsert);
第二次查询:
WITH upsert AS (UPDATE timeranges SET value=value WHERE value='abc3' RETURNING *)
INSERT INTO timeranges (value) SELECT 'abc3' WHERE NOT EXISTS (SELECT * FROM upsert);
预期结果 会有abc3而不是abc1。 (我想覆盖它)
我不明白出了什么问题。当我从'abc'更改为'abc2'创建重复条目。
box=> select * from timeranges;
value
-------
abc
abc3
(2 rows)
我以为它应该覆盖它?我只是想覆盖以前的条目
请帮我解决我出错的地方。
感谢您的时间!
答案 0 :(得分:0)
感谢@Abelisto和SO:我修复了查询。
这就是我用过的。
WITH upsert AS (UPDATE timeranges SET value=? RETURNING *)
INSERT INTO timeranges (value) SELECT ? WHERE NOT EXISTS (SELECT * FROM upsert) RETURNING *;
这会更新一切!或者如果它不存在则创建一个。