Ruby on rails 如何在rails迁移中反转Postgresql唯一索引约束?

Ruby on rails 如何在rails迁移中反转Postgresql唯一索引约束?,ruby-on-rails,postgresql,rails-migrations,Ruby On Rails,Postgresql,Rails Migrations,我在模型上创建了一个唯一索引,如下所示: 添加索引(:courses,:name,unique:true) 我不再要求名称是唯一的。我想我也有同样的问题,所以我仔细研究了这些建议,但没有结果 当我尝试添加具有相同名称的记录时,会收到类似“ActiveRecord::RecordNotUnique:PG::UniqueViolation:错误:重复键值违反唯一约束”的错误 要删除我尝试过的唯一约束,请执行以下操作: remove\u索引:课程:名称 (迁移成功,但后来我收到相同的错误,表明仍然存在

我在模型上创建了一个唯一索引,如下所示:

添加索引(:courses,:name,unique:true)

我不再要求名称是唯一的。我想我也有同样的问题,所以我仔细研究了这些建议,但没有结果

当我尝试添加具有相同名称的记录时,会收到类似“ActiveRecord::RecordNotUnique:PG::UniqueViolation:错误:重复键值违反唯一约束”的错误

要删除我尝试过的唯一约束,请执行以下操作:

  • remove\u索引:课程:名称

    (迁移成功,但后来我收到相同的错误,表明仍然存在唯一性约束)

  • 在名称上执行“更改表格课程删除约束唯一索引课程”

  • 执行“ALTER TABLE COURES DROP CONSTRAINT index\u COURES\u on\u name”

  • 执行“更改表课程删除约束唯一名称”

  • 执行“更改表课程删除约束名称”

  • 在名称上执行“更改表格课程放置索引课程”

  • 执行“更改表格课程在名称上删除索引课程”

  • 执行“删除索引唯一\u课程\u名称”

  • (PG::UndefinedObject:错误:索引“unique\u courses\u name”不存在)

  • execute“ALTER TABLE courses disable CONSTRAINT unique\u courses\u name”
  • (PG::SyntaxError:ERROR:CONSTRAINT处或附近的语法错误) 第1行:ALTER TABLE COURCES禁用约束(唯一\u COURCES\u名称)

  • 执行“ALTER TABLE COURCES DROP INDEX unique\u COURCES\u name”

  • 我使用的是psql 9.4.4、Rails 4.2和我的最后一点理智。谢谢大家。

    如果删除旧索引并再次添加,我认为unique将被删除

    class RemoveUniqueFromCoursesName < ActiveRecord::Migration
      def change
        remove_index(:courses, :name)
        add_index(:courses, :name)
      end
    end
    
    class RemoveUniqueFromCoursesName
    显示来自
    psql
    的表定义,例如
    \dt courses
    @craig-它表示在dev中找不到任何关系,在生产中也找不到数据库连接(我猜是因为它是指向数据库的URL,而不是Heroku上的/var中)。我将调查为什么会出现此错误,尽管它看起来工作正常。我同意这应该可以工作,就像我在迁移运行上的尝试一样,但db约束仍然存在,阻止我添加具有重复名称的记录。我认为错误在我的配置中更深,这只是症状。