Как импортировать *огромный* блоки данных в 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 ...

У меня есть более чем 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 проверки на ключевые ограничения для каждой строки, которая, вероятно, добавляет некоторые ненужные издержки, поскольку я знаю наверняка, что данные допустимы. Существует ли способ ускорить импорт, т.е. временно отключение ограничительной проверки?

10
задан Attila O. 9 August 2010 в 04:46
поделиться

2 ответа

  1. Убедитесь, что оба ограничения внешнего ключа DEFERRABLE
  2. Используйте COPY для загрузки данных
  3. Если вы не можете использовать COPY, используйте подготовленный оператор для вашего INSERT.
  4. Правильные настройки конфигурации также помогут, проверьте настройки WAL .
16
ответ дан 3 December 2019 в 21:57
поделиться

Ответ - да... Depesz написал здесь статью об откладываемой уникальности. К сожалению, похоже, что это функция версии 9.0.

хмм... Может быть, эта статья не относится к вашей ситуации? Кажется, мы уже некоторое время можем устанавливать ограничения на отложенные... Я предполагаю, что это уникальная ситуация (каламбур).

0
ответ дан 3 December 2019 в 21:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: