0

我们有一个使用基于 postgres 模式的多租户和 Apartment gem 的 Rails 编写的 SAAS 平台。不同的模式是相同的,每个表中具有相同数量的表和相同的列。我们希望迁移到基于外键的多租户系统,在该系统中,我们希望将来自不同模式的所有记录合并到一个模式中,并使用租户 ID 标识每条记录。合并来自不同模式的所有记录并保留外键关系的正确方法是什么。

4

1 回答 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 回答