Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带表达式的多列索引(PostgreSQL和Rails)_Sql_Ruby On Rails_Postgresql - Fatal编程技术网

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

带表达式的多列索引(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

我需要为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_col, :int2_col], name: 'index_name'
我收到

PG::UndefinedColumn:错误:列“lower(varchar\u col)”不存在

是否可以使用Rails
add\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查询;)我在下面加上了答案。