1. ホーム
  2. ruby-on-rails

マイグレーションにより、既に存在するインデックスに `unique` 制約を追加する方法

2023-08-18 23:51:47

質問

どのようにすれば unique: true 制約をRailsデータベースの既存のインデックスに追加するにはどうしたらよいでしょうか?

で移行しようとしたのですが

  def change
    add_index :editabilities, [:user_id, :list_id], unique: true
  end

というエラーが出て、移行に失敗します。

editabilities'テーブル上のインデックス名 'index_editabilities_on_user_id_and_list_id' は既に存在します。 'editabilities'はすでに存在しています。

rails4とpostgresqlを使用しています。

どのように解決するのですか?

古いインデックスを削除し、新しい制約で再度追加してください。

def change
  remove_index :editabilities, [:user_id, :list_id]
  add_index :editabilities, [:user_id, :list_id], unique: true
end