Docker部署Django3.2时PostGIS扩展不可用问题求助
解决PostGIS与PostgreSQL版本不匹配问题
问题根源
容器内的PostgreSQL版本是15,但通过apt-get install安装的PostGIS是适配PostgreSQL14的,导致Django调用时找不到对应15版本目录下的扩展文件。
解决方案
1. 安装适配PostgreSQL15的PostGIS扩展
修改Dockerfile,指定安装适配PostgreSQL15的PostGIS包:
# 添加PostgreSQL官方源以获取对应版本的PostGIS RUN echo "deb http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list RUN wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - # 更新源后安装PostgreSQL15对应的PostGIS RUN apt-get update && apt-get -y install postgresql-15-postgis-3 postgis
2. 验证扩展版本
容器启动后,进入容器执行以下命令确认版本匹配:
# 查看PostgreSQL版本 psql --version # 查看PostGIS是否在15版本目录下 ls /usr/share/postgresql/15/extension/ | grep postgis
若能看到postgis.control文件,说明安装正确。
3. 给目标数据库启用PostGIS扩展
执行migrate前,需先为数据库启用PostGIS:
# 进入PostgreSQL控制台后执行 CREATE EXTENSION IF NOT EXISTS postgis;
也可通过Django迁移脚本实现(更便捷):在app的迁移文件中添加如下逻辑:
from django.db import migrations class Migration(migrations.Migration): initial = True dependencies = [] operations = [ migrations.RunSQL('CREATE EXTENSION IF NOT EXISTS postgis;'), ]
4. 重新构建并运行容器
docker-compose build docker-compose up -d # 执行迁移命令 docker-compose exec <你的Django容器名称> python manage.py migrate
内容的提问来源于stack exchange,提问作者Ananth
相关产品推荐
相关产品推荐

