项目数据库从Oracle换成postgreSQL,MERGE INTO怎么办?
问题描述
有个文件上传操作,文件数据解析后,数据库和文件中相同的数据覆盖更新,不同的新增。原本用的MERGE INTO,判断数据相同的关联条件有几个。现在换成了postgreSQL,版本不高,没法用MERGE INTO,自带的 INSERT INTO...ON CONFLICT...UPDATE SET
由于字段没有约束没法用。插入还好,但是更新大量数据现在自己想出来的只有一条一条循环更新,也不能建表,该怎么办啊?有大佬指点一下吗?
你期待的结果是什么?
希望大佬可以提供优化批量更新的思路,技术用的springboot + mybatis + postgreSQL
回复
1个回答
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);
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容