如何将postgres表合并到另一个表中?

时间:2015-01-12 10:28:47

标签: java postgresql

我有一个带有约束的主postgres表,主键(id)和通常的东西。

然后我有一个临时表,它具有相同的列,但没有约束。我使用该临时表进行批量批量插入。

我想不时合并这些表by id,意思是:我想将临时表中的数据插入主表中,确保:

  • 主表中不存在的id应该只是插入
  • 确实存在的id应该是更新

如何在临时表中为大约100万个条目最好地实现这些?

2 个答案:

答案 0 :(得分:0)

以下回答基于UPDATES以残酷的方式制作:DELETE + INSERT

  1. 删除主表上的约束

    ALTER TABLE [main_table] DROP CONSTRAINT ...

    ALTER TABLE [main_table] DROP CONSTRAINT ...

  2. 从主表中删除临时行中存在的行

    DELETE FROM [main_table] WHERE id IN (SELECT id FROM [temp_table]);

  3. 从临时表中插入所有内容

    INSERT INTO [main_table] SELECT * FROM [temp_table];

  4. 重新创建约束

    ALTER TABLE [main_table] ADD FOREIGN KEY ...

    ALTER TABLE [main_table] ADD FOREIGN KEY ...

答案 1 :(得分:-1)

您应该使用merge声明:

MERGE INTO main_table main
USING temp_table temp
ON main.Id = temp.Id
WHEN MATCHED THEN
 UPDATE SET main.name=temp.name ....
WHEN NOT MATCHED THEN 
 INSERT VALUES (Id, .....)