Rails schema.rb 不包含新的自定义 Postgres 函数



我刚刚通过常规迁移创建了一个新的自定义 Postgres 函数。

class CreateBestBowlingFigureFunction < ActiveRecord::Migration
  def change
    execute "CREATE OR REPLACE FUNCTION ......"
  end
end

迁移后,此新功能在 schema.rb 中不可用。

根据官方文档,我在运行测试之前使用命令db:schema:load创建架构。

那么,在运行测试之前创建自定义函数的最佳实践是什么?

schema.rb

处理(参见 Rails 指南的第 6.2 节(视图或自定义函数。我们在应用程序中有一个视图,但架构不适用于它。

我们改用structure.sql因为这正确地设置了我们的视图,我的感觉是同样适用于自定义函数。要使用 structure.sql 而不是 schema.rb:

这是在config/application.rb中通过config.active_record.schema_format设置设置的,该设置可以是:sql或:ruby。

您还可以结合使用schema.rb(用于常规表和索引(和structure.sql(用于自定义函数(。要为测试环境设置此组合,请执行以下操作:

bundle exec rake db:schema:load
bundle exec rake db:structure:load

在此设置中,请注意结构.sql必须手动维护,而schema.rb将由Rails为您维护。

最新更新