简体   繁体   English

Postgres中的批处理条件INSERT INTO语句

[英]Batch Conditional INSERT INTO statement in Postgres

I want to UPSERT in Postgres, but my version is below 9.5 so I cannot use ON CONFILICT . 我想在Postgres中进行UPSERT ,但是我的版本低于9.5,所以我不能使用ON CONFILICT I found something like this: 我发现了这样的事情:

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);

But how can I do this with batch values? 但是我该如何使用批处理值呢? This statement might can express what I want to do (It cannot work): 该语句可以表达我想做的事情(它不起作用):

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);

Use multiple VALUES in a WITH clause ( CTE ) and refer to it in the SELECT part of a INSERT INTO.. SELECT WITH子句(CTE)中使用多个VALUES ,并在INSERT INTO.. SELECTSELECT部分中引用它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 )

DEMO DEMO

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM