首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将多个postgres模式合并为一个模式并保持外键关系的正确方法是什么?

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

Stack Overflow用户
提问于 2020-06-09 15:51:21
回答 1查看 52关注 0票数 0

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

EN

回答 1

Stack Overflow用户

发布于 2020-06-09 17:51:23

这是一种需要小心的情况。我认为(我可能错了)最好的方法是添加到所有的表tenant_idoriginal_id中……在尝试迁移之前,请使用该记录的id填充所有表中的original_id。本质上,这是为了记录id在合并之前的值。

在合并之后,您可以运行一个重建关联的rake任务。所以如果你有..。

代码语言:javascript
运行
复制
class Foo
has_many :bars

您的迁移脚本可以(在迁移之后)

代码语言:javascript
运行
复制
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。如果它出错,你不能重启它,除非完全重做合并。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62277605

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档