Вставьте или обновите postgresql en mass - PullRequest
1 голос
/ 01 марта 2012

У меня 16000 предметов в рубиновом хеше. (загружается как XML и конвертируется в хеш) Мне нужно вставить их в базу данных. Раз в неделю некоторые из них меняются, но я не могу сказать, какие из них.

То, что я увидел, это перейти прямо к SQL, потому что активная запись (на этом сайте) была в 70 раз медленнее при простой вставке. Даже не думая об обновлении / вставке

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

Ответы [ 2 ]

2 голосов
/ 01 марта 2012

Самый быстрый способ загрузки огромных объемов данных в PostgreSQL - это команда COPY.

Просто создайте файл с разделителями со всеми данными, TRUNCATE вашей таблицы, отбросьте все индексы и ограничения, а затем загрузите ваши данные с помощью COPY.

После этого запустите ANALYZE для целевой таблицы, а затем создайте индексы и ограничения.

http://www.postgresql.org/docs/9.1/static/sql-copy.html

1 голос
/ 01 марта 2012

У меня очень похожий вариант использования.Я читаю XML-файл в базу данных напрямую, анализирую его с xpath() во временную таблицу и выполняю все проверки и обновления с хорошим SQL.Работает очень хорошо (и быстро) для меня.

Я недавно опубликовал код для этого в соответствующем ответе здесь .
Если вам приходится иметь дело с неуникальными элементами в узлах XML, здесь еще немного.

...