我们有一个使用基于 postgres 模式的多租户和 Apartment gem 的 Rails 编写的 SAAS 平台。不同的模式是相同的,每个表中具有相同数量的表和相同的列。我们希望迁移到基于外键的多租户系统,在该系统中,我们希望将来自不同模式的所有记录合并到一个模式中,并使用租户 ID 标识每条记录。合并来自不同模式的所有记录并保留外键关系的正确方法是什么。
问问题
69 次
1 回答
0
这是需要小心的情况。我认为(我可能是错的)最好的方法是添加到所有表中tenant_id
并且original_id
......在尝试迁移之前填充original_id
所有具有id
该记录的表。本质上,这是记录id
合并前的价值。
合并后,您可以运行重建关联的 rake 任务。所以如果你有...
class Foo
has_many :bars
您的迁移脚本会做(迁移后)
Bar.all.each do |bar|
foo = Foo.find_by(tenant_id: bar.tenant_id, original_id: bar.foo_id)
bar.update_column(:foo_id, foo.id)
end
你需要为每个关系做类似的事情,所以这有点困难。
希望其他人会提出更好的解决方案。
注意这不是幂等的。如果它出错,您无法重新启动它,除非完全重做合并。
于 2020-06-09T09:51:22.987 回答