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

时间:2014-12-16 14:38:56

标签: ruby-on-rails postgresql

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

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

迁移后,这个新函数在schema.rb中不可用。

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

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

1 个答案:

答案 0 :(得分:13)

schema.rb does not handle(参见Rails 3.2.x指南的6.2节和Rails 4指南的7.2节)视图或自定义函数。我们的应用程序中有一个视图,架构不适用于它。

我们使用structure.sql代替,因为这正确地设置了我们的视图,我的感觉与自定义函数相同。使用structure.sql而不是schema.rb:

  

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

您还可以使用schema.rb(对于常规表和索引)和structure.sql(对于自定义函数)的组合。要为测试环境设置此组合:

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

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