我们有一个用Rails编写的SAAS平台,使用postgres的基于模式的多租户和公寓gem。不同的模式是相同的,具有相同数量的表和每个表中相同的列。我们希望迁移到基于外键的多租户系统,在该系统中,我们希望将来自不同模式的所有记录合并到单个模式中,并使用tenant_id标识每个记录。合并来自不同模式的所有记录并保留外键关系的正确方式是什么?
发布于 2020-06-09 17:51:23
这是一种需要小心的情况。我认为(我可能错了)最好的方法是添加到所有的表tenant_id和original_id中……在尝试迁移之前,请使用该记录的id填充所有表中的original_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你需要为每个关系做一些类似的事情,所以这有点繁琐。
希望其他人能想出更好的解决方案。
注意这不是IDEMPOTENT。如果它出错,你不能重启它,除非完全重做合并。
https://stackoverflow.com/questions/62277605
复制相似问题