ruby-on-rails - Rails 迁移为 2 列之间的差异添加索引
问题描述
在我的 Ruby on Rails 应用程序中,我有一个Message
包含一created_at
列和一status_updated_at
列的模型。它们都是日期时间。
为了加快查询,例如Message.where(status: 'delivered', account_id: 11).where('status_updated_at - created_at >= ?', "180 seconds")
,我想为列status_updated_at
和created_at
.
我试过这段代码:
class AddMessageIndicesForDashboard < ActiveRecord::Migration[5.1]
def change
add_index :messages, [:status, :account_id, :created_at, "(status_updated_at-created_at)"], name: 'dashboard_delivery_time_index'
end
end
这导致PG::UndefinedColumn: ERROR: column "status_updated_at-created_at" does not exist
奇怪的是,如果我只想status_udpated_at - created_at
通过做添加索引add_index :messages, "(status_updated_at-created_at)", name: 'dashboard_delivery_time_index'
,它会起作用。
有什么建议么?谢谢!
解决方案
也许试试
add_index :messages, "(status_updated_at-created_at)", name: 'dashboard_delivery_time_index'
CREATE INDEX 命令的语法通常需要在索引表达式周围加上括号...当表达式只是一个函数调用时,括号可以省略...
由于您想使用表达式而不是函数,因此应该根据文档使用额外的括号。
推荐阅读
- docker - IIS 反向代理卡在一个文件上
- excel - 最近联系日期的客户退货状态
- powershell - 将 PowerShell 命令转换为脚本
- powershell - 具有针对多个 AD OU 的搜索库的 Powershell GET-ADuser
- dart - 使用 onTap 导航器颤振创建变量
- python - 如何解决 ValueError: could not convert string to float in python
- amazon-web-services - Athena 从 AWS DMS CSV 文件中读取
- fortran - 重塑 Fortran 数组
- qt - 如何将 qwindows.dll 复制到平台目标子文件夹中?
- vue.js - Firefox 中的 Vue.js 复选框问题,Chrome 和 IE 中的工作文件