मेरे पास एक डेटाबेस है जिसे मैं यूयूआईडी को पोस्टग्रेस्क्ल में प्राथमिक कुंजी के रूप में उपयोग करना चाहता हूं।यूयूआईडी प्राथमिक कुंजी का उपयोग करने के लिए जटिल रेल डेटाबेस को माइग्रेट करने के लिए कैसे करें Postgresql
मेरे पास गहरे बहु-स्तरीय संघों के साथ लगभग 30 टेबल हैं। क्या सभी मौजूदा आईडी को यूयूआईडी में बदलने का कोई आसान तरीका है?
इससे: 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
सवाल:
- क्या यह काम करता है?
- क्या ऐसा करने का कोई आसान तरीका है?
- क्या प्राथमिक रिकॉर्ड बदलने से पहले जब तक उन्हें पुनर्प्राप्त किया जाता है तब तक बच्चे के रिकॉर्ड ठीक से पुनर्प्राप्त किए जाएंगे?
- क्या नई प्राथमिक कुंजी पहले से ही परिवर्तित तालिका के रूप में उत्पन्न हो जाएगी?
ऐसा करने में किसी भी मदद या सुझाव के लिए बहुत बहुत धन्यवाद।
नहीं, मैंने एक प्रतिलिपि पर यह कोशिश नहीं की है और निश्चित रूप से यह केवल उत्पादन डेटाबेस पर परीक्षण नहीं करेगा। मैं सोच रहा था कि क्या ए) इस बारे में जाने का यह तरीका है, और बी) क्या कोई आसान तरीका है (कुछ रेल जादू जो मुझे नहीं पता)। धन्यवाद – riley