Commit 7d8dfccf authored by Valery Sizov's avatar Valery Sizov

speed up migration to identities

parent bbf9953b
...@@ -8,9 +8,11 @@ class AddIdentityTable < ActiveRecord::Migration ...@@ -8,9 +8,11 @@ class AddIdentityTable < ActiveRecord::Migration
add_index :identities, :user_id add_index :identities, :user_id
User.where("provider IS NOT NULL").find_each do |user| execute <<eos
execute "INSERT INTO identities(provider, extern_uid, user_id) VALUES('#{user.provider}', '#{user.extern_uid}', '#{user.id}')" INSERT INTO identities (provider, extern_uid, user_id)
end SELECT provider, extern_uid, id FROM users
WHERE provider IS NOT NULL
eos
remove_column :users, :extern_uid remove_column :users, :extern_uid
remove_column :users, :provider remove_column :users, :provider
...@@ -20,11 +22,15 @@ class AddIdentityTable < ActiveRecord::Migration ...@@ -20,11 +22,15 @@ class AddIdentityTable < ActiveRecord::Migration
add_column :users, :extern_uid, :string add_column :users, :extern_uid, :string
add_column :users, :provider, :string add_column :users, :provider, :string
User.where("id IN(SELECT user_id FROM identities)").find_each do |user| if ActiveRecord::Base.connection.adapter_name == 'PostgreSQL'
identity = user.identities.last execute <<eos
user.extern_uid = identity.extern_uid UPDATE users u
user.provider = identity.provider SET provider = i.provider, extern_uid = i.extern_uid
user.save FROM identities i
WHERE i.user_id = u.id
eos
else
execute "UPDATE users u, identities i SET u.provider = i.provider, u.extern_uid = i.extern_uid WHERE u.id = i.user_id"
end end
drop_table :identities drop_table :identities
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment