带表达式的多列索引(PostgreSQL 和 Rails)

Pet*_*kov 3 sql postgresql ruby-on-rails

我需要为 3 列(VARCHAR,INTINT)创建多列索引,让我们称它们为varchar_colint1_colint2_col。对于VARCHAR列,我需要应用lower(varchar_col)表达式。

当我用表达式创建一列索引时

add_index :table, 'lower(varchar_col)', name: 'index_name'
Run Code Online (Sandbox Code Playgroud)

它有效,但是当我尝试创建多列时

add_index :table, ['lower(varchar_col)', :int1_col, :int2_col], name: 'index_name'
Run Code Online (Sandbox Code Playgroud)

我收到

PG::UndefinedColumn: 错误:列“lower(varchar_col)”不存在

是否可以使用 Railsadd_index函数创建这样的索引,或者我需要在迁移文件中执行 SQL 查询?PostgreSQL 是否支持带表达式的多列索引?如果它支持,我必须在迁移文件中写入什么才能使其工作?

感谢您的任何帮助!

PS我正在使用Rails 5。

Ily*_*rov 7

您可以将带有表达式的列作为字符串发送:

add_index :table, 'lower(varchar_col), int1_col, int2_col', name: 'index_name'
Run Code Online (Sandbox Code Playgroud)