You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django migrate失败后如何解除PostgreSQL数据库死锁?

解决Django Migrate时遇到的PostgreSQL死锁问题

你这遇到的是典型的PostgreSQL死锁问题——两个数据库进程互相攥着对方需要的锁,形成了循环等待,直接把migrate给卡得动不了了。下面给你一步步解决的办法,还有以后怎么避免的建议:

第一步:找到并终止死锁的进程

先远程连接到你的PostgreSQL数据库,执行这条SQL看看那两个卡住的进程在干啥:

SELECT pid, query, state 
FROM pg_stat_activity 
WHERE datname = '你的数据库名称' -- 替换成你实际的数据库名
AND pid IN (11463, 11681); -- 错误提示里的两个进程ID

确认这俩进程确实是和migrate相关的阻塞进程之后,就可以把它们终止掉:

SELECT pg_terminate_backend(11463);
SELECT pg_terminate_backend(11681);

敲黑板:一定要确认这两个进程不是其他业务的关键进程,别误杀了正常服务的进程!

第二步:重新跑Migrate

把卡住的进程干掉之后,回到你的Django项目环境,重新执行migrate命令:

python manage.py migrate

这次应该就能正常执行完成了。

以后怎么避免再踩这个坑?

给你几个实用建议:

  • 跑migrate的时候,尽量暂停所有其他会访问这个数据库的服务或脚本(比如Django开发服务器、定时任务、数据同步工具啥的),减少锁冲突的概率。
  • 如果你的迁移涉及大表操作(比如给大表加带默认值的字段、改字段类型),尽量选业务低峰期执行,或者把大操作拆成多个小迁移步骤,别让一个操作长时间占着锁。
  • 写迁移文件的时候,尽量别在单条迁移里塞多个可能锁表的操作,拆成多个小迁移文件,降低死锁的风险。

内容的提问来源于stack exchange,提问作者roob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:04:01