J'ai une structure de données qui ressemble à ceci:Comment importer des blocs de données * gigantesques * vers 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 ...
J'ai plus de 5 millions de lignes dans la table de modèle, et je dois insérer ~ 50 millions lignes dans chacune des deux tables clés étrangères. J'ai SQL
fichiers qui ressemblent à ceci:
INSERT INTO place_belongtos (from_place_id, to_place_id) VALUES (123, 456);
et ils sont sur le point 7 Gb chacun. Le problème est, quand je fais psql < belongtos.sql
, il me faut environ 12 heures pour importer ~ 4 millions lignes sur mon CPU AMD Turion64x2. OS est Gentoo ~ amd64, PostgreSQL est la version 8.4, compilé localement. Le répertoire de données est un montage de liaison, situé sur ma deuxième partition étendue (ext4
), qui, je crois, n'est pas le goulot d'étranglement. Je soupçonne qu'il faut si longtemps pour insérer les relations de clés étrangères parce que psql
vérifie les contraintes de clé pour chaque ligne, ce qui ajoute probablement un surcoût inutile, car je sais avec certitude que les données sont valides. Y a-t-il un moyen d'accélérer l'importation, c'est-à-dire de désactiver temporairement le contrôle de contrainte?
oui mais je pense que c'est seulement dans 8.4+ hmm faut le chercher .... – xenoterracide