簡體   English   中英

Django 1.7遷移掛起

[英]Django 1.7 Migrations hanging

我有一個django遷移我試圖申請。 它變得很好(它很小,它只向兩個不同的模型添加一個CharField 。但是當我運行實際的遷移時它會掛起(沒有失敗,沒有成功,只是坐着)。

通過谷歌搜索,我發現其他打開的連接可以搞亂它,所以我重新啟動了數據庫。 但是,此DB連接到連續運行的作業,新查詢會立即潛入。 但是它們很小,上次我嘗試重新啟動時我認為我能夠在其他任何事情之前執行遷移。 依然沒有。

還有其他已知的問題導致這樣的事情嗎?

至少在PostgreSQL中,當存在活動事務時,您無法修改表(即使它只是添加新列)。 最簡單的解決方法通常是:

  • 運行遷移腳本(將掛起)
  • 重新啟動您的webserver / wsgi容器

重新啟動Web服務器時,將中止所有打開的事務(假設您沒有后台進程也打開事務),因此只要沒有事務阻塞您的表,遷移就會完成。

我今天遇到同樣的問題。 我發現您可以在運行事務之前立即使用以下SQL清除PostgreSQL中的任何掛起事務:

-- View all the current activity
-- SELECT * FROM pg_stat_activity;

-- terminate other connections (make sure to add your own IP address)
SELECT pg_terminate_backend(procpid) FROM pg_stat_activity WHERE client_addr <> 'YOUR IP HERE'

這將終止任何不屬於你的連接,這可能在所有情況下都不是理想的,但就像魅力一樣。

值得注意的是,未來讀者在嘗試將遷移應用於不正確大小的CharField(依賴於DB實現)時,遷移可能會掛起。 我試圖改變一個CharField大於255,它只是懸掛。 即使在如上所述終止連接之后,它也不會將其修復為大小大於255的CharField,因為我的實現(postgresql)不正確。

TLDR; 確保您的CharField為255或更低,如果更大,將CharField更改為TextField,它可以解決您的問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM