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

Rails非超级用户下,多数据库迁移安装PostGIS扩展失败求助

问题排查与解决方案

核心问题

你在迁移中使用了shard: :superuser参数切换连接,但这是针对数据库分片的用法,而你的配置是多数据库实例(multiple databases),所以Rails并没有切换到预期的超级用户连接。

修正方案

方案1:修改迁移文件的连接切换代码

将connected_to的参数从shard改为database,明确指定要使用的数据库连接:

class AddPostgisExtensionToDatabase < ActiveRecord::Migration[7.0]
  def change
    ActiveRecord::Base.connected_to(database: :superuser) do
      enable_extension "postgis"
    end
  end
end

修改后执行常规迁移命令即可:

rails db:migrate

方案2:利用指定数据库的迁移路径

你已经为superuser数据库配置了migration_paths: db/migrate/superuser,可以直接把迁移文件移动到db/migrate/superuser目录下,然后执行该数据库专属的迁移命令:

rails db:migrate:superuser

这种方式不需要在迁移代码中手动切换连接,Rails会自动使用superuser的配置执行该目录下的所有迁移。

额外验证

  • 确认database.yml中superuser的username、password、host等配置完全正确,与你手动验证时使用的参数一致
  • 确保admin用户对mos_development数据库拥有超级用户权限(你已验证手动执行CREATE EXTENSION postgis;可行,此步可忽略)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 21:13:02