我使用java(jdbc)将一些数据从10Gb文件导入到postgres数据库表中。导入过程需要12个多小时才能完成,因此需要改进导入过程。我试过复制命令插入。某些select命令也随插入表一起运行。任何人都可以建议提高速度的方法吗?
答案 0 :(得分:2)
当需要数百万行时,标准SQL INSERT
语句通常具有太大的开销。 10 GiB的数据并不是那么多,但对于INSERT
来说肯定太多了(你要么每次INSERT都有一个巨大的事务或提交/回滚)。
官方文档中有一个很好的14.4. Populating a Database章节。 14.4.2。使用COPY
对您来说特别有趣:
使用
COPY
在一个命令中加载所有行,而不是使用一系列INSERT命令。COPY
命令针对加载大量行进行了优化;它不如INSERT
灵活,但对大数据负载的开销要小得多。由于COPY
是单个命令,因此如果使用此方法填充表,则无需禁用自动提交。