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

将本地数据库推送到Heroku时如何添加PostGIS扩展?

解决Heroku pg:push结合PostGIS扩展的问题

不能直接在pg:push的默认流程中执行CREATE EXTENSION postgis;——pg:push要求远程数据库必须为空,而手动创建扩展后数据库会被标记为非空,触发Remote database is not empty的报错;但如果不提前创建扩展,pg:push导入数据时会因PostGIS类型(如public.geography)不存在而失败。

以下是两种可行的解决方法:

方法一:自定义备份+手动导入

  1. 本地导出数据库时排除PostGIS相关架构,避免重复创建扩展的冲突
    pg_dump --exclude-schema=postgis --exclude-schema=topology -Fc -d 本地数据库名 > local_db.dump
    
  2. 在Heroku的空数据库中先创建PostGIS扩展
    heroku pg:psql -c "CREATE EXTENSION postgis;"
    
  3. 将本地备份导入Heroku数据库
    heroku pg:restore --app 你的Heroku应用名 local_db.dump
    

方法二:用脚本串联重置、建扩展、推送流程

编写一个shell脚本,自动完成“清空远程库→创建扩展→执行pg:push”的完整流程,避免手动操作的矛盾:

#!/bin/bash
# 替换成你的本地数据库名和Heroku应用名
LOCAL_DB="你的本地数据库名"
HEROKU_APP="你的Heroku应用名"

# 重置远程数据库(需要确认操作)
heroku pg:reset DATABASE --confirm $HEROKU_APP
# 创建PostGIS扩展
heroku pg:psql -c "CREATE EXTENSION postgis;"
# 执行pg:push推送本地数据
heroku pg:push $LOCAL_DB DATABASE --app $HEROKU_APP

执行脚本前确保本地PostgreSQL服务正常,且Heroku CLI已登录。

内容的提问来源于stack exchange,提问作者Duncan Felix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:57:22