summaryrefslogtreecommitdiff
path: root/lib/gitlab/background_migration/migrate_users_bio_to_user_details.rb
blob: bbe2164ae4e6b7d5e027a0f0349060acb7e3e088 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# frozen_string_literal: true
# rubocop:disable Style/Documentation

module Gitlab
  module BackgroundMigration
    class MigrateUsersBioToUserDetails
      class User < ActiveRecord::Base
        self.table_name = 'users'
      end

      class UserDetails < ActiveRecord::Base
        self.table_name = 'user_details'
      end

      def perform(start_id, stop_id)
        relation = User
          .select("id AS user_id", "substring(COALESCE(bio, '') from 1 for 255) AS bio")
          .where("(COALESCE(bio, '') IS DISTINCT FROM '')")
          .where(id: (start_id..stop_id))

        ActiveRecord::Base.connection.execute <<-EOF.strip_heredoc
          INSERT INTO user_details
          (user_id, bio)
          #{relation.to_sql}
          ON CONFLICT (user_id)
          DO UPDATE SET
            "bio" = EXCLUDED."bio";
        EOF
      end
    end
  end
end