私は次のように定義されたインデックスを持っています
add_index :users, :email, :unique => true
'change_index'のように、このインデックスを変更してUNIQUE制約を削除する方法はありますか?
それとも、インデックスを削除して、UNIQUE制約なしで再度追加する唯一の方法ですか?
私は次のように定義されたインデックスを持っています
add_index :users, :email, :unique => true
'change_index'のように、このインデックスを変更してUNIQUE制約を削除する方法はありますか?
それとも、インデックスを削除して、UNIQUE制約なしで再度追加する唯一の方法ですか?
移行には「change_index」がないため、次のことができます。
remove_index :users, :email
add_index :users, :email, :unique => false
さまざまなインデックスタイプは、通常、使用しているデータベースに非常にさまざまな方法で実装されます。プライマリインデックスは、セカンダリインデックスとは大きく異なります。また、一意のインデックスは通常、検索インデックスとは異なり、主なユースケースを容易にします。つまり、値が列にすでに存在するかどうかをすばやく判断するのか、効率的な検索を可能にするのかを判断します。
そのため、(DBMSによっては)既存のインデックスを変更することはできません。いずれにせよ、最も安全な方法は、インデックスを削除して新しいインデックスを作成することです。これは、ライブ操作中に実行できます。データベースもRailsアプリもシャットダウンする必要はありません。