带表达式的多列索引(PostgreSQL和Rails)
我需要为3列(带表达式的多列索引(PostgreSQL和Rails),sql,ruby-on-rails,postgresql,Sql,Ruby On Rails,Postgresql,我需要为3列(VARCHAR,INT和INT)创建多列索引,让我们将它们称为VARCHAR\u col,int1\u col和int2\u col。对于VARCHAR列,我需要应用lower(VARCHAR\u col)表达式 当我用表达式创建一列索引时 add_index :table, 'lower(varchar_col)', name: 'index_name' 这是可行的,但当我尝试用 add_index :table, ['lower(varchar_col)', :int1_co
VARCHAR
,INT
和INT
)创建多列索引,让我们将它们称为VARCHAR\u col
,int1\u col
和int2\u col
。对于VARCHAR
列,我需要应用lower(VARCHAR\u col)
表达式
当我用表达式创建一列索引时
add_index :table, 'lower(varchar_col)', name: 'index_name'
这是可行的,但当我尝试用
add_index :table, ['lower(varchar_col)', :int1_col, :int2_col], name: 'index_name'
我收到
PG::UndefinedColumn:错误:列“lower(varchar\u col)”不存在
是否可以使用Railsadd\u index
函数创建这样的索引,或者我需要在迁移文件中执行SQL查询?PostgreSQL是否支持带表达式的多列索引?如果它支持,我必须在迁移文件中写些什么才能使它工作
谢谢你的帮助
另外,我正在使用Rails 5。您可以将包含表达式的列作为字符串发送:
add_index :table, 'lower(varchar_col), int1_col, int2_col', name: 'index_name'
所以,在做了一些研究之后,我在迁移文件中执行了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
太好了,谢谢!虽然我已经在迁移文件中执行了SQL查询;)我在下面加上了答案。