Ich habe eine Datenstruktur, die wie folgt aussieht:Wie importieren * riesige * Datenblöcke nach PostgreSQL?
Model Place
primary key "id"
foreign key "parent" -> Place
foreign key "neighbor" -> Place (symmetryc)
foreign key "belongtos" -> Place (asymmetric)
a bunch of scalar fields ...
Ich habe mehr als 5 Millionen Zeilen in der Modelltabelle, und ich brauche ~ 50 Millionen Reihen in jedem der beiden Fremdschlüsseltabellen einzufügen. Ich habe SQL
Dateien, die wie folgt aussehen:
INSERT INTO place_belongtos (from_place_id, to_place_id) VALUES (123, 456);
und sie sind über 7 Gb jeder. Das Problem ist, wenn ich psql < belongtos.sql
tun, es nimmt mir über 12 Stunden~ 4.000.000 Reihen auf meinem AMD Turion64x2 CPU zu importieren. OS ist Gentoo ~ amd64, PostgreSQL ist Version 8.4, lokal kompiliert. Das Datenverzeichnis ist ein Bind Mount, das sich auf meiner zweiten erweiterten Partition befindet (ext4
), was meiner Meinung nach nicht der Flaschenhals ist.
Ich vermute, dass es so lange dauert, die Fremdschlüsselrelationen einzufügen, weil psql
nach den Schlüsseleinschränkungen für jede Zeile sucht, was wahrscheinlich unnötigen Overhead hinzufügt, da ich sicher weiß, dass die Daten gültig sind. Gibt es eine Möglichkeit, den Import zu beschleunigen, d. H. Die Constraint-Prüfung vorübergehend zu deaktivieren?
ja, aber ich denke, es ist nur in 8.4+ hmm haben es nachzuschlagen .... – xenoterracide