项目数据库从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
我也不经常用,因为这个东西兼容性很差。
实现思路是:
- 先把大量的数据一条一条更新
- 不论是什么数据库,更新记录都会返回更新条数
- 记录更新条数为 0 的记录,这些就是数据库中没有,需要新增的数据
- 最后再批量新增数据
只有第一次消耗会大些,后面效率就很高了。
以上是 项目数据库从Oracle换成postgreSQL,MERGE INTO怎么办? 的全部内容, 来源链接: utcz.com/p/945263.html