You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 05:42:05