将数据从应用程序(Java)导入临时表的最快方法是什么?

时间:2017-05-12 19:50:34

标签: java spring postgresql jdbc spring-jdbc

我正在使用Java,Spring和PostgreSQL开发一个应用程序。我使用Spring-JDBC作为数据库层。

在我的Java应用程序中,我有大约10,000行需要插入临时表中。导入它们的最快方法是什么?

我已经尝试过:

create temporary table my_table on commit drop;

with data as (values (...), (...), ...) -- all 10.000 rows enumerated
insert into my_table select * from data;

但是这会失败,因为查询变得太大而无法解析。

我应该简单地发送较小的批次,还是有更聪明的方法将数据流式传输到数据库?

更新

我在做什么:

在数据库中,有一个表,比方说,'外部实体'。每隔几个小时,我就会得到一个包含完整的当前实体集的更新(通过ActiveMQ代理)。这个集合需要在我的数据库中。我做了以下事情:

  • 插入临时表
  • 将新实体从临时表复制到实际表
  • 从实际表中删除旧实体
  • 更新实际表格中的已更改实体

我不能简单地截断我的实际表并直接插入到实际的表中,因为该表的外部约束和该表上的触发器。换句话说,我只反映实际的变化。

1 个答案:

答案 0 :(得分:0)

尝试使用copy from stdin。这将是放置10K行的最聪明,最快捷的方式

http://pgpen.blogspot.ie/2013/05/using-copy-in-your-jdbc-code.html