我需要使用libpqxx将大量数据(大约 7.000.000 个条目)批量加载到 PostgreSQL 数据库中。我已阅读有关如何填充数据库的文档,但我不确定如何在我的情况下使用它。首先我不能使用文件,所以数据库上的COPY是不可能的。在我导入时,我正在加载的数据库和表也需要正常工作。
场景如下:我们定期(大约每月一次)从另一个应用程序获取一个包含所有数据(包括已经存在的条目)的文件。由于条目的数量,不可能检查每个条目是否存在,我们只是批量插入新数据(在预处理之后)。
目前为了处理这个问题,我创建了一个新表,使用来自 libpqxx 的 tablewriter 插入数据(没有事务),然后在事务中我重命名旧表并将新表重命名到正确的位置。
此外,我们不仅需要为一张表执行此操作,还需要为具有不同布局的多张表执行此操作。因此,我试图将表格的写入与日期的解析分开。现在我只需要考虑表的创建。为此,我使用
create temporary table foo_temp (like foo including indexes including defaults including constraints );
这样我得到一个类似的表格foo
,我不需要真正知道我写作的地方的布局。然而,这给我留下了一个问题,这将产生一个带有索引和约束的表,并且上面的指南说索引会使批量插入变慢。但是,如果我删除索引和约束(或首先不复制它们),我需要一种方法在为原始表设置的相同庄园中重新创建它们。
关于如何快速处理这个问题的任何好的提示?
编辑:
在相关方面:使用我刚刚注意到的数据库,CREATE TABLE
上面不会复制任何外键约束,所以我似乎也需要手动指定这些。或者有没有办法将这些与所有其他约束一起处理?