2011-02-11 107 views
11

有沒有人這樣做?這是一個簡單的過程嗎?我們正在考慮切換事務,因爲最近mysql似乎正在「退出」。如何輕鬆將Django應用程序從mySQL轉換爲PostgreSQL?

+0

1)MySQL的支持事務處理(InnoDB的)2)是什麼讓你覺得MySQL是 「crapping出」 了嗎? – 2011-02-11 01:13:15

+0

因爲現在我們剛剛開始聽到這些錯誤的聲音:OperationalError:(1205,'Lock超時超時;嘗試重新啓動事務')另外,在Django中使用South有時會在沒有真正事務的情況下受到傷害。 – 2011-02-11 14:43:28

+1

MySQL不支持模式事務 - 這可能會導致大量令人頭痛的遷移 – yarbelk 2013-02-18 05:20:27

回答

1

我從來沒有親自做過,但它看起來像dumpdataloaddata的組合,manage.py的選項將能夠很容易地解決您的問題。也就是說,除非你有很多數據庫特定的東西存在於ORM之外,比如存儲過程。

0

我還沒有做過。 我首先關注這個migration guide, there is a MySql section這應該照顧所有的數據。然後django只需在設置中將mysql切換到postgre。我認爲這應該沒問題。

我發現了另一個關於stackoverflow的問題,它應該有助於將mysql轉換爲postgre here

0
  1. 蟒蛇manage.py dump.data >> data.json

  2. 在postrgesql創建數據庫和用戶

  3. 在django設置中將您剛創建的數據庫設置爲默認數據庫中的postrgesql,或者使用param --datab ase = your_postrgesql_database下一步
  4. 運行syncdb以創建表。

    蟒執行syncdb [--database = your_postrgesql_database] --noinput

  5. 沒有數據創建轉儲,丟棄所有表和負載突降。或截斷所有表(表django_content_type whith數據可能不等於您的舊數據 - 這是很多錯誤的方式)。在這一步,我們需要postgresql-db中的空表。

  6. 當你在空表PostgreSQL的分貝只是加載數據:

    蟒蛇manage.py loaddata data.json

而且很有趣!

0

我寫了複製一個數據庫到另一個Django的管理命令: https://gist.github.com/mturilin/1ed9763ab4aa98516a7d

您需要在設置中添加數據庫和使用這個命令:

./manage.py copy_db from_database to_database app1 app2 app3 --delete --ignore-errors 

什麼酷的這個命令它遞歸複製依賴對象。例如,如果模型有兩個外鍵和兩個多對多關係,它將首先複製其他對象以確保您不會收到外鍵違例錯誤。

9

Django的

首先備份您的JSON燈具老Mysql數據庫的數據轉換MySQL數據庫Postgres數據庫:

$ python manage.py dumpdata contenttypes --indent=4 --natural-foreign > contenttype.json 
$ python manage.py dumpdata --exclude contenttypes --indent=4 --natural-foreign > everything_else.json 

然後你settings.DATABASES切換到Postgres的設置。

PostgreSQL中創建表:

$ python manage.py migrate 

現在刪除所有被自動遷移作出(Django的CONTENTTYPES,用戶組等)內容:

$ python manage.py sqlflush | ./manage.py dbshell 

,現在你可以放心地進口一切,並保持你的PK是一樣的!

$ python manage.py loaddata contenttype.json 
$ python manage.py loaddata everything_else.json 

測試和Django == 1.8

相關問題