diff options
Diffstat (limited to 'db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb')
-rw-r--r-- | db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb b/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb new file mode 100644 index 00000000000..7e79c89203a --- /dev/null +++ b/db/post_migrate/20220223124428_schedule_merge_topics_with_same_name.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class ScheduleMergeTopicsWithSameName < Gitlab::Database::Migration[1.0] + MIGRATION = 'MergeTopicsWithSameName' + BATCH_SIZE = 100 + + disable_ddl_transaction! + + class Topic < ActiveRecord::Base + self.table_name = 'topics' + end + + def up + Topic.select('LOWER(name) as name').group('LOWER(name)').having('COUNT(*) > 1').order('LOWER(name)') + .in_groups_of(BATCH_SIZE, false).each_with_index do |group, i| + migrate_in((i + 1) * 2.minutes, MIGRATION, [group.map(&:name)]) + end + end + + def down + # no-op + end +end |