У меня есть структура данных, которая похожа на это:
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. ОС является хинду ~amd64, PostgreSQL является версией 8.4, скомпилированной локально. Dir данных является связыванием, монтируются, расположенный на моем втором расширенном разделе (ext4
), которому я верю, не узкое место.
Я подозреваю, что это занимает много времени для вставки отношений внешнего ключа потому что psql
проверки на ключевые ограничения для каждой строки, которая, вероятно, добавляет некоторые ненужные издержки, поскольку я знаю наверняка, что данные допустимы. Существует ли способ ускорить импорт, т.е. временно отключение ограничительной проверки?
Ответ - да... Depesz написал здесь статью об откладываемой уникальности. К сожалению, похоже, что это функция версии 9.0.
хмм... Может быть, эта статья не относится к вашей ситуации? Кажется, мы уже некоторое время можем устанавливать ограничения на отложенные... Я предполагаю, что это уникальная ситуация (каламбур).