删除postgres Rails中的数据库唯一索引约束

时间:2016-12-19 00:05:52

标签: ruby-on-rails postgresql rails-migrations

在我的Rails structure.sql中,我有这行代码:

CREATE UNIQUE INDEX primary_active_fruit_in_season_constraint ON trees USING btree (user_id) WHERE (is_ripe AND is_in_season);

我不再需要此验证,因此我将删除Tree模型上的Rails代码中的验证。但是如何删除此数据库验证?它从哪里来的? rails迁移中的哪些代码行创建了这个?如何删除它?

1 个答案:

答案 0 :(得分:0)

我们无法知道是谁创建了该索引,但是附加到它的WHERE子句暗示(因为AR通常不知道这些高级内容)它是用以下方式手动创建的:

connection.execute('create unique index ...')

您可以以相同的方式删除迁移中的索引:

def up
  connection.execute('drop index primary_active_fruit_in_season')
end
def down
  connection.execute('CREATE UNIQUE INDEX primary_active_fruit_in_season_constraint ON trees USING btree (user_id) WHERE (is_ripe AND is_in_season)')
end

手动创建一个包含这两种方法的迁移文件,并像往常一样rake db:migrate