Django 1.7迁移挂起

问题描述 投票:6回答:3

我有一个django迁移我试图申请。它变得很好(它很小,它只向两个不同的模型添加了一个CharField。但是当我运行实际的迁移时它会挂起(没有失败,没有成功,只是坐着)。

通过谷歌搜索,我发现其他打开的连接可以搞乱它,所以我重新启动了数据库。但是,此DB连接到连续运行的作业,新查询会立即潜入。但是它们很小,上次我尝试重新启动时我认为我能够在其他任何事情之前执行迁移。依然没有。

还有其他已知的问题导致这样的事情吗?

python django database-migration
3个回答
5
投票

至少在PostgreSQL中,当存在活动事务时,您无法修改表(即使它只是添加新列)。最简单的解决方法通常是:

  • 运行迁移脚本(将挂起)
  • 重新启动您的webserver / wsgi容器

重新启动Web服务器时,将中止所有打开的事务(假设您没有后台进程也打开事务),因此只要没有事务阻塞您的表,迁移就会完成。


4
投票

我今天遇到同样的问题。我发现您可以在运行事务之前立即使用以下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'

这将终止任何不属于你的连接,这可能在所有情况下都不是理想的,但就像魅力一样。


0
投票

值得注意的是,未来读者在尝试将迁移应用于不正确大小的CharField(依赖于DB实现)时,迁移可能会挂起。我试图改变一个CharField大于255,它只是悬挂。即使在如上所述终止连接之后,它也不会将其修复为大小大于255的CharField,因为我的实现(postgresql)不正确。

TLDR;确保您的CharField为255或更低,如果更大,将CharField更改为TextField,它可以解决您的问题!

© www.soinside.com 2019 - 2024. All rights reserved.