Mam strukturę danych, która wygląda tak:Jak zaimportować * ogromne * porcje danych do 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 ...
Mam ponad 5 milionów wierszy w tabeli model i muszę wstawić ~ 50 mln wierszy w każdej z dwóch kluczy obcych tablicach. Mam SQL
pliki, które wyglądają tak:
INSERT INTO place_belongtos (from_place_id, to_place_id) VALUES (123, 456);
i są one o 7 Gb każda. Problem polega na tym, że gdy wykonuję psql < belongtos.sql
, zajmuje mi on około 12 godzin zaimportować ~ 4 miliony wierszy na moim procesorze AMD Turion64x2. OS to Gentoo ~ amd64, PostgreSQL to wersja 8.4, skompilowany lokalnie. Katalog danych jest monterem bindów, znajdującym się na mojej drugiej rozszerzonej partycji (ext4
), co, jak sądzę, nie jest wąskim gardłem.
Podejrzewam, że wstawienie relacji klucza obcego trwa tak długo, ponieważ psql
sprawdza ograniczenia klucza dla każdego wiersza, co prawdopodobnie powoduje niepotrzebne obciążenie, ponieważ wiem na pewno, że dane są poprawne. Czy istnieje sposób na przyspieszenie importu, tj. Tymczasowe wyłączenie sprawdzania ograniczenia?
tak, ale myślę, że tylko w 8,4+ hmm muszę to sprawdzić ... – xenoterracide