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

如何将Heroku Postgres中PostGIS扩展从heroku_ext移至public schema?

解决Heroku PostgreSQL PostGIS扩展从heroku_ext迁移至public的问题

步骤1:修正Data Labs命令的参数错误

你之前执行heroku data:labs:enable时的报错,是因为addon参数需要填数据库的附加组件名称,而非DATABASE_URL。先通过以下命令获取正确的附加组件名称:

heroku addons -a {OUR_APP_NAME}

找到类似heroku-postgresql:{PLAN_NAME}的条目(比如heroku-postgresql:hobby-dev),这就是你的数据库附加组件标识。之后重新执行启用命令:

heroku data:labs:enable extensions-on-any-schema --addon {HEROKU_POSTGRESQL_ADDON_NAME} -a {OUR_APP_NAME}

步骤2:以超级用户身份迁移扩展

启用Data Labs功能后,需要通过Heroku提供的临时超级用户权限执行迁移。先进入数据库的超级用户shell:

heroku pg:psql {HEROKU_POSTGRESQL_ADDON_NAME} -a {OUR_APP_NAME} --superuser

进入shell后执行迁移命令:

ALTER EXTENSION postgis SET SCHEMA public;

该命令会将PostGIS的所有关联对象(包括spatial_ref_sys表)完整迁移至public schema。

步骤3:验证迁移结果

迁移完成后,在psql shell中执行以下SQL确认状态:

SELECT n.nspname AS schema_name, c.relname AS table_name
FROM pg_class c
JOIN pg_namespace n ON c.relnamespace = n.oid
WHERE c.relname = 'spatial_ref_sys';

如果返回的schema_name字段值为public,则说明迁移成功。

步骤4:调整Django配置(可选)

若迁移后Django仍无法识别空间表,可在项目settings.py的数据库配置中添加schema搜索路径:

DATABASES = {
    'default': {
        'ENGINE': 'django.contrib.gis.db.backends.postgis',
        'NAME': '你的数据库名称',
        'USER': '数据库用户名',
        'PASSWORD': '数据库密码',
        'HOST': '数据库主机地址',
        'PORT': '5432',
        'OPTIONS': {
            'options': '-c search_path=public,heroku_ext'
        }
    }
}

通常迁移完成后无需此步骤,仅作为兜底方案。


内容的提问来源于stack exchange,提问作者Jarema Piekutowski

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:23:16