私のアプリはPostgreSQLデータベースを使用しています。次のような移行があります。
class CreateTagAssignments < ActiveRecord::Migration
def change
create_table :tag_assignments do |t|
t.integer :tag_id
t.integer :quote_id
t.integer :user_id
t.timestamps
end
add_index :tag_assignments, :tag_id
add_index :tag_assignments, :quote_id
end
end
レコードはこれらの2つの列で頻繁に検索されるため、それぞれに個別のインデックスを作成します。しかし、ここで、データベースレベルでペア( tag_id
、 )の一意性を強制したいと思います。quote_id
試しadd_index :tag_assignments, [:tag_id, :quote_id], unique: true
ましたが、エラーが発生しました:
PG::Error: ERROR: could not create unique index "index_tag_assignments_on_tag_id_and_quote_id"
DETAIL: Key (tag_id, quote_id)=(10, 1) is duplicated.
: CREATE UNIQUE INDEX "index_tag_assignments_on_tag_id_and_quote_id" ON "tag_assignments" ("tag_id", "quote_id")
では、複数のインデックスが複数列のインデックスの役割を果たしているように見えますか?もしそうなら、私はで制約を追加することがALTER TABLE ... ADD CONSTRAINT
できますが、ActiveRecordでそれを行うにはどうすればよいですか?
編集:手動で実行ALTER TABLE ... ADD CONSTRAINT
すると同じエラーが発生します。