PostgreSQL:UPDATE ...在MISSING INSERT?

时间:2016-06-27 14:37:31

标签: sql performance postgresql upsert

PostgreSQL有“INSERT ... ON CONFLICT UPDATE”构造,但在大多数情况下我的查询需要更新。

所以我不希望数据库会尝试插入然后再更新,我希望它会尝试UPDATE并且如果记录不存在 - 将INSERT

有可能吗? 它会提高性能吗?

2 个答案:

答案 0 :(得分:0)

它会提高性能,还取决于您将拥有哪些代码。如果您构造一个表然后使用单独的函数来检查它是否具有您要添加的数据或不添加,然后相应地执行(如果存在,则插入其他否)。在这种情况下,您的代码占用了内存的一部分。使用海量数据时,此方法很好,甚至可以保存一小部分内存

答案 1 :(得分:0)

INSERT INTO hundred(name, name_slug, status) 
SELECT DISTINCT name, name_slug, status 
FROM hundred 
WHERE NOT EXISTS ( 
 SELECT 'X' 
 FROM temp_data 
 WHERE temp_data.name = hundred.name AND temp_data.name_slug = hundred.name_slug  AND temp_data.status = status );

简化,"其中"声明是做你想做的事情的关键点:

   INSERT INTO table (id, field, field2)
   SELECT 3, 'C', 'Z'
   WHERE NOT EXISTS (SELECT 1 FROM table WHERE id=3);