项目数据库从Oracle换成postgreSQL,MERGE INTO怎么办?

问题描述

有个文件上传操作,文件数据解析后,数据库和文件中相同的数据覆盖更新,不同的新增。原本用的MERGE INTO,判断数据相同的关联条件有几个。现在换成了postgreSQL,版本不高,没法用MERGE INTO,自带的 INSERT INTO...ON CONFLICT...UPDATE SET 由于字段没有约束没法用。插入还好,但是更新大量数据现在自己想出来的只有一条一条循环更新,也不能建表,该怎么办啊?有大佬指点一下吗?

你期待的结果是什么?

希望大佬可以提供优化批量更新的思路,技术用的springboot + mybatis + postgreSQL


回答:

建一个临时表,这个表的结构和你要更新的表的结构要相同。

CREATE TEMP TABLE temp_table AS SELECT * FROM your_table LIMIT 0;

把你的数据插入到这个临时表里。

INSERT INTO temp_table (...) VALUES (...), (...), ...;

用UPDATE 语句来更新记录。

UPDATE your_table

SET column1 = temp_table.column1, column2 = temp_table.column2, ...

FROM temp_table

WHERE your_table.id = temp_table.id;

用INSERT 语句来插入记录。

INSERT INTO your_table (...)

SELECT ... FROM temp_table

WHERE temp_table.id NOT IN (SELECT id FROM your_table);


回答:

我的做法是直接更新 + 事后插入,即使有 MERGE INTO 我也不经常用,因为这个东西兼容性很差。

实现思路是:

  1. 先把大量的数据一条一条更新
  2. 不论是什么数据库,更新记录都会返回更新条数
  3. 记录更新条数为 0 的记录,这些就是数据库中没有,需要新增的数据
  4. 最后再批量新增数据

只有第一次消耗会大些,后面效率就很高了。

以上是 项目数据库从Oracle换成postgreSQL,MERGE INTO怎么办? 的全部内容, 来源链接: utcz.com/p/945263.html

回到顶部