Rails 7连接已有PostgreSQL数据库时遭遇schema_migrations权限不足问题求助
解决Rails连接现有PostgreSQL数据库时的schema_migrations权限问题
我之前也碰到过一模一样的问题!别担心,这是因为Rails默认会启动迁移版本检查机制——哪怕你没创建任何迁移文件、也没用Rails初始化过这个数据库,它还是会自动去查询schema_migrations表,而你的数据库里根本没有这个表,加上用户权限限制,就触发了这个错误。
下面是两种靠谱的解决办法,选一个就行:
方法1:通过配置文件禁用迁移检查
直接在Rails的全局配置里告诉它不要管迁移的事:
- 打开
config/application.rb,在class Application < Rails::Application代码块里添加一行配置:
config.active_record.schema_format = :none
- 如果只想在特定环境(比如开发环境)生效,就把这行代码放到对应的环境配置文件里,比如
config/environments/development.rb。
这个配置会让Active Record彻底跳过迁移版本的检查逻辑,自然就不会去查询schema_migrations表了。
方法2:覆盖SchemaMigration模型的表存在检查
如果方法1没生效,还可以通过初始化文件强制让Rails认为schema_migrations表不存在:
- 在
config/initializers目录下新建一个文件,比如disable_schema_migrations.rb; - 把下面的代码粘贴进去:
module ActiveRecord class SchemaMigration < Base def self.table_exists? false end end end
这样Rails在启动时检查表是否存在时,会直接得到false的结果,就不会执行后续的查询操作了。
补充说明
那些已经正常运行的Rails应用,肯定也是用了类似的配置跳过了迁移检查——毕竟你的数据库不是通过Rails迁移创建的,完全不需要这套机制。另外要注意,确保你的数据库用户有足够的权限访问你实际需要操作的数据表,这才是核心,schema_migrations的问题只是Rails自带的“多余检查”而已。
内容的提问来源于stack exchange,提问作者Matías Leandro
相关产品推荐
相关产品推荐

