Django迁移后PgAdmin中PostgreSQL表不显示问题求助
问题排查与解决方案
核心问题:Django未配置PostgreSQL数据库连接
你的settings.py中仅加载了DATABASE_URL环境变量,但未将其映射到Django核心的DATABASES配置字典,导致Django默认使用内置的SQLite数据库执行迁移操作——这就是为什么migrate命令无报错,但PostgreSQL中看不到表的根本原因。
步骤1:修复settings.py的数据库配置
在settings.py文件末尾添加以下代码,将DATABASE_URL解析为Django可用的数据库配置:
# 补充数据库配置 DATABASES = { "default": dj_database_url.parse(GENERAL_SETTINGS.DATABASE_URL) }
步骤2:验证数据库连接正确性
执行以下命令,查看Django当前连接的数据库结构:
docker-compose run app python manage.py inspectdb
如果输出内容包含SQLite相关的表结构(如sqlite_sequence),说明之前确实使用了默认数据库;修改配置后重新执行该命令,应显示PostgreSQL的系统表(如pg_stat_activity)。
步骤3:重新执行迁移操作
- 停止并清理现有容器与数据卷(注意:此操作会清空PostgreSQL数据,若需保留数据可跳过
-v参数):
docker-compose down -v
- 重新构建并启动服务:
docker-compose build docker-compose up -d db
- 等待PostgreSQL容器启动完成后,执行迁移:
docker-compose run app python manage.py makemigrations docker-compose run app python manage.py migrate
额外排查点
- 检查PgAdmin连接目标:确认PgAdmin连接的是容器映射的本地端口
5432,而非本地安装的PostgreSQL服务(若本地有PostgreSQL,建议先停止它避免端口冲突);同时验证连接的数据库名称、用户名、密码与配置完全一致。 - 完善PostgreSQL容器的健康检查:你的
docker-compose.yml中db服务未定义健康检查规则,导致depends_on的service_healthy条件无法生效。可在db服务中添加以下配置,确保应用仅在数据库就绪后连接:
healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d ikenga_db"] interval: 5s timeout: 5s retries: 5
内容的提问来源于stack exchange,提问作者theocode
相关产品推荐
相关产品推荐

