本地Django执行migrate报SSL错误:服务器不支持SSL但被要求
解决Django迁移时PostgreSQL SSL连接错误问题
以下是针对该问题的排查和解决步骤:
确认Django数据库配置是否正确加载
检查settings.py中的DATABASES配置,确保OPTIONS参数在目标数据库条目下正确定义,避免拼写错误或层级错误:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': '你的数据库名', 'USER': '你的数据库用户', 'PASSWORD': '你的数据库密码', 'HOST': 'localhost', 'PORT': '5432', 'OPTIONS': {'sslmode': 'disable'}, } }可以临时在
dev.py中添加配置验证代码,运行python3 dev.py确认配置是否生效:from django.conf import settings print(settings.DATABASES['default']['OPTIONS'])检查PostgreSQL服务端配置
- 打开
pg_hba.conf文件(Mac通过brew安装的路径通常为/usr/local/var/postgres/pg_hba.conf),确保本地连接条目未强制SSL:host all all 127.0.0.1/32 md5 host all all ::1/128 md5 - 打开
postgresql.conf文件,确认SSL处于关闭状态:ssl = off - 修改后重启PostgreSQL服务:
brew services restart postgresql
- 打开
排查环境变量干扰
检查系统是否存在PGSSLMODE环境变量强制SSL连接,运行echo $PGSSLMODE查看值。如果输出为require或其他强制SSL的选项,临时取消该变量后再执行迁移:unset PGSSLMODE python3 dev.py migrate验证Django连接逻辑
编写简单测试脚本test_db.py,用Django的连接方式测试数据库,确认错误是否一致:import django django.setup() from django.db import connection try: with connection.cursor(): print("数据库连接成功") except Exception as e: print(f"连接失败详情: {e}")运行
python3 test_db.py,根据输出进一步定位问题。重装psycopg2依赖
虽然直接用psycopg2能连接,但Django环境的依赖可能存在异常,尝试卸载重装:pip uninstall psycopg2-binary pip install psycopg2-binary
内容的提问来源于stack exchange,提问作者Sasikumar
相关产品推荐
相关产品推荐

