【问题标题】:how to delete duplicate row when adding index rails添加索引栏时如何删除重复的行
【发布时间】:2014-07-06 14:49:55
【问题描述】:

所以我试图在我的投票表上添加一个索引,以防止添加重复的行。

在我之前的 stackoverflow 问题中。我问“如何确保不会通过 activerecords 将重复的行添加到我的数据库表中?” How do I ensure that duplicate rows are not added to my database table via activerecords?

答案是通过数据库迁移添加索引,这解决了它。

class AddUniqueIndexToVotes < ActiveRecord::Migration
  def change
     add_index :votes,  [:voter_id, :votefor_id, :vote], unique: true
  end
end

但是,现在我得到了错误。

PG::Error: ERROR:  could not create unique index "index_votes_on_voter_id_and_votefor_id_and_vote"
DETAIL:  Key (voter_id, votefor_id, vote)=(581, 519, 2) is duplicated.

如何在迁移运行时自动删除重复的行/行。

谢谢!

【问题讨论】:

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


    【解决方案1】:

    假设您有一个由一列组成的主键,您可以先使用以下 sql 语句删除重复记录。另外,请注意,它会删除所有 id 列没有最小值的重复记录。

        DELETE FROM votes v WHERE v.id NOT IN 
        (SELECT MIN(id) FROM votes GROUP BY voter_id, votefor_id, vote)
    

    【讨论】:

      【解决方案2】:

      运行另一个迁移,在此之前将销毁所有“重复”行?

      您还想将 validates_uniqueness_of 添加到模型中

      http://apidock.com/rails/ActiveRecord/Validations/ClassMethods/validates_uniqueness_of

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-16
        • 1970-01-01
        • 1970-01-01
        • 2018-06-30
        • 2011-01-23
        • 2019-06-23
        相关资源
        最近更新 更多