PostgreSQL 的批量更新插入最佳实践

时间:2020-12-29 09:26:44

标签: java postgresql multithreading amazon-web-services jdbc

我在 PostgreSQL 中有一个包含百万条记录的源表(临时表)和一个包含百万条记录的目标表(应用程序表)。移动应用程序正在使用目标表(同步)。

我必须从源表到目标表进行合并(在冲突时插入),并有条件地删除目标表中的一些记录。这必须每 4 小时发生一次(因为阶段表中的数据来自不同的源系统)。由于某些代码维护原因,我不应该使用存储过程。

  1. 我可以使用 JDBC 来执行多个查询吗? 与不同的偏移和限制并行?它会提高性能吗?

    插入测试... 从 test_stg 中选择 ... 按 .. OFFSET 0 ROWS 排序 仅获取第一个 1000 行 关于冲突(约束...) 做更新 设置...

  2. 从 Java 代码在单个事务(原子)中并行运行查询的最佳方法是什么?

注意:我可以在目标表中执行删除操作,如果我成功从阶段合并到实际表。

1 个答案:

答案 0 :(得分:1)

我会一次性删除和插入/更新,如下所示:

WITH cte_delete AS (
    DELETE FROM test_stg
    RETURNING *
)
INSERT INTO test
SELECT *
FROM    cte_delete
ON CONFLICT (...)
DO UPDATE ...;

我不会从任何其他性能优化开始。保持事情简单明了,在大多数情况下效果最好。如果你没有问题,你就无法解决任何问题。

相关问题