【发布时间】:2012-11-25 01:38:38
【问题描述】:
我的应用程序使用 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 会产生同样的错误。
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-3 postgresql activerecord