我有一个如下所示的数据结构:
Model Place
primary key "id"
foreign key "parent" -> Place
foreign key "neighbor" -> Place (symmetryc)
foreign key "belongtos" -> Place (asymmetric)
a bunch of scalar fields ...
我在模型表中有超过500万行,我需要在两个外键表的每一个中插入〜5000万行。我有SQL
个文件,如下所示:
INSERT INTO place_belongtos (from_place_id, to_place_id) VALUES (123, 456);
他们各自约 7 Gb 。问题是,当我执行psql < belongtos.sql
时,我需要 12小时才能在我的AMD Turion64x2 CPU上导入 ~4百万行。操作系统是Gentoo~amd64,PostgreSQL是8.4版,本地编译。数据目录是一个绑定挂载,位于我的第二个扩展分区(ext4
)上,我认为这不是瓶颈。
我怀疑插入外键关系需要这么长时间,因为psql
会检查每一行的键约束,这可能会增加一些不必要的开销,因为我确信数据是有效的。有没有办法加快导入速度,即暂时禁用约束检查?
答案 0 :(得分:16)
答案 1 :(得分:0)
答案是肯定的...... Depesz wrote an article here on deferrable uniqueness。不幸的是,它似乎是一个9.0功能。
嗯...也许那篇文章不适用于你的情况?似乎我们已经能够set constraints to deferred一段时间......我猜这种独特是一种独特的情况(双关语)。