我的应用程序使用 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
这两列将非常频繁地搜索记录,因此我希望为每列设置一个单独的索引。但现在我想在数据库级别强制对 ( 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
会产生相同的错误。