Postgresql の主キーとして UUID を使用するように変換したいデータベースがあります。
深いマルチレベルの関連付けを持つ約 30 のテーブルがあります。現在のすべての ID を UUID に変換する「簡単な」方法はありますか?
これから: https://coderwall.com/p/n_0awq、移行中にテーブルを変更できることがわかります。私は次のようなことを考えていました:
for client in Client.all
# Retrieve children
underwritings = client.underwritings
# Change primary key
execute 'ALTER TABLE clients ALTER COLUMN id TYPE uuid;'
execute 'ALTER TABLE clients ALTER COLUMN id SET DEFAULT uuid_generate_v1();'
# Get new id - is this already generated?
client_id = client.id
for underwriting in underwritings
locations = underwriting.locations
other_record = underwriting.other_records...
execute 'ALTER TABLE underwritings ALTER COLUMN id TYPE uuid;'
execute 'ALTER TABLE underwritings ALTER COLUMN id SET DEFAULT uuid_generate_v1();'
underwriting.client_id = client_id
underwriting.saved
underwriting_id = underwriting.id
for location in locations
buildings = location.buildings
execute 'ALTER TABLE locations ALTER COLUMN id TYPE uuid;'
execute 'ALTER TABLE locations ALTER COLUMN id SET DEFAULT uuid_generate_v1();'
location.undewriting_id = underwriting_id
location.save
location_id = location.id
for building in buildings
...
end
end
for other_record in other_records
...
end
...
...
end
end
質問:
- これは機能しますか?
- これを行う簡単な方法はありますか?
- 主キーが変更される前に子レコードが取得された場合、子レコードは適切に取得されますか?
- 変更テーブルが呼び出されるとすぐに、新しい主キーはすでに生成されていますか?
これを行う上での助けやヒントをありがとう。