Docker环境下Django切换PostgreSQL遇ProgrammingError:列不存在
解决方案
问题核心
数据库中human_requirementschat表的结构未与当前模型同步,且本地删除迁移文件后,数据库内的迁移记录仍残留,导致新迁移无法正确执行。
具体操作步骤
清理数据库内的旧迁移记录
进入PostgreSQL容器,删除human应用的迁移记录:docker-compose exec db psql -U postgres -d postgres -c "DELETE FROM django_migrations WHERE app='human';"删除数据库中已存在的旧表
直接删除human应用对应的两张数据表(避免旧表结构干扰):docker-compose exec db psql -U postgres -d postgres -c "DROP TABLE IF EXISTS human_requirementschat; DROP TABLE IF EXISTS human_uploadedfile;"重新生成并执行迁移
# 生成human应用的迁移文件 docker-compose exec web python manage.py makemigrations human # 执行迁移 docker-compose exec web python manage.py migrate human
额外检查点
- 确认Docker容器是否挂载了本地代码目录:如果是通过镜像打包代码,需重新构建镜像并重启容器:
docker-compose build web docker-compose up -d - 快速验证
models.py中的alias字段确实存在(你的代码中已包含该字段,此步可快速排除代码同步问题)
内容的提问来源于stack exchange,提问作者tthheemmaannii
相关产品推荐
相关产品推荐

