summaryrefslogtreecommitdiff
path: root/db
diff options
context:
space:
mode:
authorValery Sizov <valery@gitlab.com>2015-05-08 08:30:05 +0000
committerValery Sizov <valery@gitlab.com>2015-05-08 08:30:05 +0000
commitcd2659fdb572214cc0270632db4da9f9c89bdf9c (patch)
treeb692113481337d1282800a93d396de9f25fac7ca /db
parentd881345ed71b05d404d277624556a438064f09cd (diff)
parentb60717604c8f7b2cb089d4fd30cc282d4f77a85f (diff)
downloadgitlab-ce-cd2659fdb572214cc0270632db4da9f9c89bdf9c.tar.gz
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
Diffstat (limited to 'db')
-rw-r--r--db/migrate/20150425164647_remove_duplicate_tags.rb16
1 files changed, 16 insertions, 0 deletions
diff --git a/db/migrate/20150425164647_remove_duplicate_tags.rb b/db/migrate/20150425164647_remove_duplicate_tags.rb
new file mode 100644
index 00000000000..1a9152cb965
--- /dev/null
+++ b/db/migrate/20150425164647_remove_duplicate_tags.rb
@@ -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