2013-08-31 3 views
1

У меня есть исходные данные из моей старой базы данных, которая занимает около 6 ГБ. Я мог бы «dumpdata» моей старой базы данных без проблем. Но когда я попытался восстановить их в новую базу данных, я получил MemoryError:MemoryError при загрузке огромных исходных данных

python manage.py loaddata fixtures/initial_data.json 
    MemoryError: Problem installing fixture 'fixtures/initial_data.json': 

Есть ли способ сделать loaddata работы с кусочками или же можно загрузить большой файл?

+0

Сколько столов содержит светильник? Если более одного, вы можете разделить одну таблицу на файл. –

+0

Есть несколько таблиц, но только один из них является огромным. – cem

ответ

1

Для больших баз данных используйте инструменты резервного копирования для сброса данных базы данных вместо «django dumpdata». Для загрузки данных базы данных вместо этого используйте инструменты восстановления «django loaddata».

+0

Я думаю, что это единственный способ. Проблема в том, что одна база данных является Sql Server, а другая - Postgres, будет сложно скопировать внешние ключи. – cem

+0

@ user2211623: Является ли стандартная методика копирования данных без ограничений FK, а затем повторно накладывает ограничения в конце, а не работает? –

+0

@ user2211623: Статья [Microsoft SQL Server для миграции PostgreSQL Яном Хардингом] (http://wiki.postgresql.org/wiki/Microsoft_SQL_Server_to_PostgreSQL_Migration_by_Ian_Harding) –

6

Я написал этот скрипт, который является вилкой dumpdata django, но сбрасывает данные в кусках, чтобы избежать MemoryError. А затем загрузите эти куски один за другим.

Скрипт доступен на https://github.com/fastinetserver/django-dumpdata-chunks

Пример использования:

1) выгрузить данные во множество файлов:

mkdir some-folder 

./manage.py dumpdata_chunks your-app-name 
--output-folder=./some-folder --max-records-per-chunk=100000 

2) Загрузка данных из папки:

find ./some-folder | egrep -o "([0-9]+_[0-9]+)" | xargs ./manage.py loaddata 

PS. Я использовал его для перемещения данных из Postgresql в MySQL.

+2

Зачем вам переходить из Postgresql в MySQL? – Cesar

+0

Как всегда: запрос клиента :) Причины: клиент хочет интегрировать данные с некоторой фреймовой структурой, которая поддерживает только mysql. – Kostyantyn

Смежные вопросы