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

作者站长头像
站长
· 阅读数 7

问题描述

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

你期待的结果是什么?

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

回复
1个回答
avatar
test
2024-06-30

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

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);
回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容