Tôi có một cơ sở dữ liệu tôi muốn chuyển đổi để sử dụng UUID làm khóa chính trong postgresql.Cách di chuyển cơ sở dữ liệu Rails phức tạp để sử dụng các khóa chính UUID Postgresql
Tôi có khoảng 30 bảng với các liên kết đa cấp sâu. Có cách nào 'dễ dàng' để chuyển đổi tất cả ID hiện tại thành UUID không?
Từ đây: https://coderwall.com/p/n_0awq, tôi có thể thấy rằng tôi có thể thay đổi bảng khi di chuyển. Tôi đã suy nghĩ một cái gì đó như thế này:
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
Câu hỏi:
- Sẽ làm việc này?
- Có cách nào dễ dàng hơn để thực hiện việc này không?
- Hồ sơ trẻ em có được truy xuất đúng cách miễn là chúng được truy lục trước khi khóa chính được thay đổi không?
- Khóa chính mới có được tạo ngay khi bảng thay đổi được gọi không?
Cảm ơn rất nhiều sự giúp đỡ hoặc mẹo khi thực hiện việc này.
Không, tôi chưa thử bản sao này và tất nhiên sẽ không chỉ thử nghiệm trên cơ sở dữ liệu sản xuất. Tôi đã tự hỏi nếu a) đây là cách để đi về điều này, và b) là có một cách dễ dàng hơn (một số phép thuật Rails tôi không biết về). Cảm ơn – riley