Django项目从SQLite3迁移至PostgreSQL后Admin面板报错求助
Django切换PostgreSQL后Admin访问报错排查方案
1. 确认PostgreSQL依赖安装
- 开发环境优先安装
psycopg2-binary(无需额外编译依赖):pip install psycopg2-binary - 若用
psycopg2,需提前安装系统级PostgreSQL开发库(如Ubuntu的libpq-dev、CentOS的postgresql-devel)。
2. 检查settings.py数据库配置
确保配置参数完全匹配你的PostgreSQL环境,示例配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名', # 需手动在PostgreSQL中创建 'USER': 'PostgreSQL用户名', 'PASSWORD': '用户密码', 'HOST': '127.0.0.1', 'PORT': '5432', } }
- 注意:Django不会自动创建PostgreSQL数据库,必须手动建库;
- 可先用postgres超级用户测试,排除权限不足问题。
3. 重建数据库与迁移
- 手动创建数据库(通过psql命令行):
psql -U postgres CREATE DATABASE 你的数据库名; - 清理残留迁移文件,重新执行迁移:
- 删除所有app下
migrations文件夹内的文件(保留__init__.py); - 执行强制同步命令(适合无旧数据场景):
python manage.py makemigrations python manage.py migrate --run-syncdb
- 删除所有app下
- 重新创建超级用户:
python manage.py createsuperuser
4. 验证Admin核心表是否存在
进入PostgreSQL命令行,检查Admin相关表是否生成:
psql -U 你的用户名 -d 你的数据库名 \dt # 列出所有表
需确认django_admin_log、auth_user、django_content_type等核心表存在,若缺失则说明迁移未完全执行。
5. 统一数据库编码与时区
- 创建数据库时指定UTF8编码:
CREATE DATABASE 你的数据库名 ENCODING 'UTF8' LC_COLLATE='en_US.UTF-8' LC_CTYPE='en_US.UTF-8'; - Django settings中保持时区一致:
TIME_ZONE = 'Asia/Shanghai' # 替换为你的实际时区 USE_TZ = True
6. 清除缓存并重启服务
- 清除Django缓存:
python manage.py clearcache - 重启开发服务器:
python manage.py runserver
内容的提问来源于stack exchange,提问作者Syed Shehab Ali
相关产品推荐
相关产品推荐

