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
相关产品推荐
相关产品推荐

