У меня есть структура данных, которая выглядит следующим образом:
Model Place
primary key "id"
foreign key "parent" -> Place
foreign key "neighbor" -> Place (symmetryc)
foreign key "belongtos" -> Place (asymmetric)
a bunch of scalar fields ...
У меня более 5 миллионов строк в таблице модели, и мне нужно вставить ~ 50 миллионов строк в каждую из двух таблиц внешнего ключа. У меня есть SQL
файлы, которые выглядят так:
INSERT INTO place_belongtos (from_place_id, to_place_id) VALUES (123, 456);
и они около 7 Гб каждый. Проблема в том, что когда я выполняю psql < belongtos.sql
, мне требуется около 12 часов , чтобы импортировать ~ 4 миллиона строк на моем процессоре AMD Turion64x2. ОС Gentoo ~ amd64, PostgreSQL версии 8.4, скомпилирована локально. Каталог данных - это монтируемое устройство, расположенное на моем втором расширенном разделе (ext4
), которое, я считаю, не является узким местом.
Я подозреваю, что вставка отношений внешнего ключа занимает очень много времени, потому что psql
проверяет наличие ключевых ограничений для каждой строки, что, вероятно, добавляет некоторые ненужные издержки, поскольку я точно знаю, что данные действительны. Есть ли способ ускорить импорт, то есть временно отключить проверку ограничений?