将数据从应用程序 (Java) 导入临时 table 的最快方法是什么?
What is the fastest way to import data from application (Java) into temporary table?
我正在使用 Java、Spring 和 PostgreSQL 开发应用程序。我正在使用 Spring-JDBC 作为数据库层。
在我的 Java 应用程序中,我有大约 10.000 行需要插入临时 table。导入它们的最快方法是什么?
我已经试过了:
create temporary table my_table on commit drop;
with data as (values (...), (...), ...) -- all 10.000 rows enumerated
insert into my_table select * from data;
但这失败了,因为查询变得太大而无法解析。
我应该只发送较小的批次,还是有更聪明的方法将数据流式传输到数据库?
更新
我在做什么:
在数据库中,有一个 table,比方说,'external entities'。每隔几个小时,我就会(通过 ActiveMQ 代理)获得完整的当前实体集的更新。这个集合需要在我的数据库中。我执行以下操作:
- 插入临时 table
- 将新实体从临时 table 复制到实际 table
- 从实际中删除旧实体 table
- 更新实际更改的实体table
我不能简单地截断我的实际 table 并直接插入实际的 table,因为对 table 的外部限制和对 table 的触发。换句话说,我只是反映了实际的变化。
尝试使用 copy from stdin
。这将是放置 10K 行的最聪明和最快的方法
http://pgpen.blogspot.ie/2013/05/using-copy-in-your-jdbc-code.html
我正在使用 Java、Spring 和 PostgreSQL 开发应用程序。我正在使用 Spring-JDBC 作为数据库层。
在我的 Java 应用程序中,我有大约 10.000 行需要插入临时 table。导入它们的最快方法是什么?
我已经试过了:
create temporary table my_table on commit drop;
with data as (values (...), (...), ...) -- all 10.000 rows enumerated
insert into my_table select * from data;
但这失败了,因为查询变得太大而无法解析。
我应该只发送较小的批次,还是有更聪明的方法将数据流式传输到数据库?
更新
我在做什么:
在数据库中,有一个 table,比方说,'external entities'。每隔几个小时,我就会(通过 ActiveMQ 代理)获得完整的当前实体集的更新。这个集合需要在我的数据库中。我执行以下操作:
- 插入临时 table
- 将新实体从临时 table 复制到实际 table
- 从实际中删除旧实体 table
- 更新实际更改的实体table
我不能简单地截断我的实际 table 并直接插入实际的 table,因为对 table 的外部限制和对 table 的触发。换句话说,我只是反映了实际的变化。
尝试使用 copy from stdin
。这将是放置 10K 行的最聪明和最快的方法
http://pgpen.blogspot.ie/2013/05/using-copy-in-your-jdbc-code.html