【发布时间】:2013-08-14 02:15:15
【问题描述】:
我在 PostgreSQL 中有一个包含三列的简单表:
- id 序列主键
- key varchar
- 值 varchar
我已经在这里看到了这个问题:Insert, on duplicate update in PostgreSQL?,但我想知道如果它存在,如何获取 id,而不是更新。如果标准做法是始终“插入”或“如果存在则更新”,这是为什么呢?执行 SELECT (LIMIT 1) 的成本是否高于执行 UPDATE?
我有以下代码
INSERT INTO tag
("key", "value")
SELECT 'key1', 'value1'
WHERE
NOT EXISTS (
SELECT id,"key","value" FROM tag WHERE key = 'key1' AND value = 'value1'
);
从某种意义上说,如果存在它就不会插入,但我想获取 id。是否有一个“返回 id”子句或类似的东西我可以在那里点击?
【问题讨论】:
-
-
仅供参考 Postgres 9.5 带来了UPSERT 功能。见blog post by Craig Kerstiens。
标签: postgresql