discourse/db/migrate/20201109170951_migrate_github_user_infos.rb
David Taylor 02278109d6
DEV: Maintain github_user_info primary key values during migration (#11286)
This will only happen if the user_associated_accounts table is currently empty. It's useful for people that may be depending on primary key values in data explorer queries. This change will only have an effect on sites which have not already run this migration.
2020-11-19 10:30:18 +00:00

46 lines
1.2 KiB
Ruby

# frozen_string_literal: true
class MigrateGithubUserInfos < ActiveRecord::Migration[6.0]
def up
# If the user_associated_accounts table is currently empty,
# maintain the primary key from github_user_infos
# This is useful for people that are using data explorer to access the data
maintain_ids = DB.query_single("SELECT count(*) FROM user_associated_accounts")[0] == 0
execute <<~SQL
INSERT INTO user_associated_accounts (
provider_name,
provider_uid,
user_id,
info,
last_used,
created_at,
updated_at
#{", id" if maintain_ids}
) SELECT
'github',
github_user_id,
user_id,
json_build_object('nickname', screen_name),
updated_at,
created_at,
updated_at
#{", id" if maintain_ids}
FROM github_user_infos
SQL
if maintain_ids
execute <<~SQL
SELECT setval(
pg_get_serial_sequence('user_associated_accounts', 'id'),
(select greatest(max(id), 1) from user_associated_accounts)
);
SQL
end
end
def down
raise ActiveRecord::IrreversibleMigration
end
end