[英]Batch Conditional INSERT INTO statement in Postgres
我想在Postgres中進行UPSERT
,但是我的版本低於9.5,所以我不能使用ON CONFILICT
。 我發現了這樣的事情:
UPDATE table SET field='C', field2='Z' WHERE id=3;
INSERT INTO table (id, field, field2)
SELECT 3, 'C', 'Z'
WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);
但是我該如何使用批處理值呢? 該語句可以表達我想做的事情(它不起作用):
INSERT INTO result_data (HOST_ID, RESOURCE_TYPE, TIMESTAMP, UPPER, LOWER, AVG)
(values ("xxxxx", "cpu", 1544313900, 80, 70, 75), ("aaaaaa", "cpu", 1544314000, 80, 70, 75))
AS result2(HOST_ID, RESOURCE_TYPE, TIMESTAMP, UPPER, LOWER, AVG)
WHERE NOT EXISTS(SELECT 1 FROM result_data WHERE result2.HOST_ID = result_data.HOST_ID);
在WITH
子句(CTE)中使用多個VALUES
,並在INSERT INTO.. SELECT
的SELECT
部分中引用它INSERT INTO.. SELECT
with result2(HOST_ID, RESOURCE_TYPE, TIMESTAMP, UPPER, LOWER, AVG) AS
(
VALUES ('xxxxx', 'cpu', 1544313900, 80, 70, 75 ),
('aaaaaa', 'cpu', 1544314000, 80, 70, 75 )
)
SELECT * FROM result2 r2
WHERE NOT EXISTS
(
SELECT 1
FROM result_data r
WHERE r.host_id = r2.host_id )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.