4

私は次のように定義されたインデックスを持っています

add_index :users, :email, :unique => true

'change_index'のように、このインデックスを変更してUNIQUE制約を削除する方法はありますか?
それとも、インデックスを削除して、UNIQUE制約なしで再度追加する唯一の方法ですか?

4

3 に答える 3

4

移行には「change_index」がないため、次のことができます。

remove_index :users, :email

add_index :users, :email, :unique => false

于 2012-06-04T07:45:16.360 に答える
3

さまざまなインデックスタイプは、通常、使用しているデータベースに非常にさまざまな方法で実装されます。プライマリインデックスは、セカンダリインデックスとは大きく異なります。また、一意のインデックスは通常、検索インデックスとは異なり、主なユースケースを容易にします。つまり、値が列にすでに存在するかどうかをすばやく判断するのか、効率的な検索を可能にするのかを判断します。

そのため、(DBMSによっては)既存のインデックスを変更することはできません。いずれにせよ、最も安全な方法は、インデックスを削除して新しいインデックスを作成することです。これは、ライブ操作中に実行できます。データベースもRailsアプリもシャットダウンする必要はありません。

于 2012-06-04T06:53:27.173 に答える