如何在我小写一列的两列上添加唯一性迁移?

时间:2015-10-03 15:08:54

标签: postgresql ruby-on-rails-4 indexing database-migration

我有两列存储字符串,:column_a:column_b

我知道我能做到:

add_index :table, [:column_a, :column_b], unique: true

但是,我需要实现以下目标:

add_index :table, [:column_a, 'lower(column_b)'], unique: true

当我尝试迁移时,这当然会出错。

我收到lower(column_b)不是列的错误。

我正在使用PostgreSQL。

老实说,在这一点上,我正在考虑只有一个名为column_b_lowercase的列,我将其编入索引。

1 个答案:

答案 0 :(得分:0)

我决定只使用SQL。这是代码。

class AddUniqueIndexingForLowercaseColumn < ActiveRecord::Migration
  def self.up
    execute "CREATE UNIQUE INDEX table_column_a_lowercase_column_b_index ON table(column_a, lower(column_b))"
  end

  def self.down
    remove_index :table, :table_column_a_lowercase_column_b_index
  end
end