我需要为3列(VARCHAR
,INT
和INT
)创建多列索引,让我们称之为varchar_col
,int1_col
和{{1 }}。对于int2_col
列,我需要应用VARCHAR
表达式。
当我使用表达式
创建单列索引时lower(varchar_col)
它有效,但当我尝试使用
创建多列时add_index :table, 'lower(varchar_col)', name: 'index_name'
我收到了
PG :: UndefinedColumn:ERROR:column" lower(varchar_col)"不存在
是否可以使用Rails add_index :table, ['lower(varchar_col)', :int1_col, :int2_col], name: 'index_name'
函数创建这样的索引,或者我需要在迁移文件中执行SQL查询? PostgreSQL是否支持带表达式的多列索引?如果它支持,我必须在迁移文件中写什么才能使它有效?
感谢您的帮助!
P.S。我使用Rails 5。
答案 0 :(得分:3)
您可以将带有表达式的列作为字符串发送:
add_index :table, 'lower(varchar_col), int1_col, int2_col', name: 'index_name'
答案 1 :(得分:0)
因此,经过一番研究,我已经在迁移文件中执行了SQL查询。我只是将它留在这里作为另一种方法,但Ilya Lavrov的建议也是有效的。
迁移文件:
def up
connection.execute(%q{
CREATE INDEX index_name ON table(lower(varchar_col), int1_col, int2_col)
})
end
def down
remove_index :table, name: 'index_name'
end