将多个 postgres 模式合并到一个保留外键关系的模式的正确方法是什么?



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

这种情况需要小心。我认为(我可能是错的(最好的方法是添加到所有表中tenant_idoriginal_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

你需要为每个关系做类似的事情,所以这有点艰难。

希望其他人能想出更好的解决方案。

请注意,这不是幂等的。如果出现错误,则无法重新启动它,除非完全重新进行合并。

相关内容

  • 没有找到相关文章

最新更新