我应该如何将包含函数的多列索引输入到 schema.rb 中?
例如这行不通:
add_index "temporary_events", ["templateinfoid", "campaign", "date(gw_out_time)", "messagetype"], :name => "temporary_events_campaign_tinfoid_date_messagetype"
rake db:test:load
rake aborted!
PGError: ERROR: column "date(gw_out_time)" does not exist
: CREATE INDEX "temporary_events_campaign_tinfoid_date_messagetype" ON "temporary_events" ("templateinfoid", "campaign", "date(gw_out_time", "messagetype")
最佳答案
用于创建索引的内置 ActiveRecord 方法 (add_index
) 不支持函数或任何其他更高级的功能。相反,您可以使用 execute
通过 SQL 创建索引:
execute <<-SQL
CREATE INDEX temporary_events_campaign_tinfoid_date_messagetype
ON temporary_events(templateinfoid, campaign, date(gw_out_time), messagetype);
SQL
请注意,如果您未使用 SQL 架构格式 (config.active_record.schema_format = :sql
),则在迁移中使用 execute
可能会出现问题。如需更多信息,请搜索 schema_format .
关于sql - Rails Postgres 功能索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3265190/