mirror of
https://github.com/wahyd4/gitlabhq.git
synced 2026-08-27 13:36:06 +10:00
Merge branch 'tag_dup' into 'master'
Remove tag duplicates
Prevention of getting this error:
```
ActiveRecord::RecordNotUnique: PG::Error: ERROR: could not create unique index "index_tags_on_name"
DETAIL: Key (name)=(XSS') is duplicated.
: CREATE UNIQUE INDEX "index_tags_on_name" ON "tags" ("name")
```
This migration fails if there are duplicates:
https://github.com/mbleigh/acts-as-taggable-on/blob/v3.5.0/db/migrate/2_add_missing_unique_indices.rb#L3
See merge request !623
This commit is contained in:
committed by
Dmitriy Zaporozhets
parent
87dd2dca60
commit
708b507328
@@ -0,0 +1,16 @@
|
||||
class RemoveDuplicateTags < ActiveRecord::Migration
|
||||
def up
|
||||
select_all("SELECT name, COUNT(id) as cnt FROM tags GROUP BY name HAVING COUNT(id) > 1").each do |tag|
|
||||
duplicate_ids = select_all("SELECT id FROM tags WHERE name = '#{tag["name"]}'").map{|tag| tag["id"]}
|
||||
origin_tag_id = duplicate_ids.first
|
||||
duplicate_ids.delete origin_tag_id
|
||||
|
||||
execute("UPDATE taggings SET tag_id = #{origin_tag_id} WHERE tag_id IN(#{duplicate_ids.join(",")})")
|
||||
execute("DELETE FROM tags WHERE id IN(#{duplicate_ids.join(",")})")
|
||||
end
|
||||
end
|
||||
|
||||
def down
|
||||
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user