2013-08-31 71 views
1

我有我的舊數據庫,大約需要6GB的初始數據。我可以「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遷移由Ian Harding](http://wiki.postgresql.org/wiki/Microsoft_SQL_Server_to_PostgreSQL_Migration_by_Ian_Harding) –

6

我寫過這個腳本,它是django的dumpdata的一個分支,但是爲了避免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的某些php框架集成。 – Kostyantyn