我仍然可以使用schema.rb而不是structure.sql来进行postgresql基于索引的查询和postgis吗?

时间:2017-05-09 23:45:24

标签: ruby-on-rails postgresql

schema.rb是数据库的Ruby表示形式,通常与数据库无关。 structure.sql是数据库的SQL表示形式,它取决于您选择的特定数据库。因此,优选使用schema.rb

我正在使用Rails 4和PostgreSQL 9.6。在Mac OSX上,我使用Postgres.app(不要使用EnterpriseDB或自制程序!),因此我安装了postgis扩展名。实际上,我遵循了this教程。

由于我使用的是Rails 4,因此我可以使用迁移添加扩展名:

class EnablePostgis < ActiveRecord::Migration[5.0]
  def change
    enable_extension :postgis
  end
end

本教程陈述如下:

  

由于我们将使用一些原始SQL,我们需要从a切换   schema.rb到structure.sql。这意味着在开发中,我们是   要在原始SQL中保存我们的数据库快照,而不是Rails的Ruby   表示。

他在他的模型中创建了以下范围:

scope :close_to, -> (latitude, longitude, distance_in_meters = 2000) {
  where(%{
    ST_DWithin(
      ST_GeographyFromText(
        'SRID=4326;POINT(' || cafes.longitude || ' ' || cafes.latitude || ')'
      ),
      ST_GeographyFromText('SRID=4326;POINT(%f %f)'),
      %d
    )
  } % [longitude, latitude, distance_in_meters])
}

此查询使用where ActiveRecord帮助程序,因此使用schema.rb显示它根本不会影响此查询。

他还使用PostgreSQL对表达式进行索引的能力,特别是对从咖啡馆的经度和纬度构建的点进行索引(在他的例子中)。

我真的需要为这个基于查询的索引使用structure.sql吗?我宁愿使用schema.rb。我可以使用schema.rb并仍然使用基于查询的索引,即使像mysql这样的某些数据库不支持它吗?

0 个答案:

没有答案