将多态表关联转换为类型列

时间:2017-08-15 10:15:30

标签: postgresql postgresql-9.1

假设我有一个entities表(200行行+),其中每行都有一个contentId列,该列引用posts,{{1}中存在的一段内容}和comments表(没有FK' s)。

现在,对于replies中的每一行,我想检查相关内容存在于哪个表中,并将其作为类型返回。

这是数据迁移过程的一部分。关于如何以相对高效的方式执行此操作的任何想法?

1 个答案:

答案 0 :(得分:1)

我会创建一个映射表,然后在迁移中使用它,基于以下查询。它可能很昂贵,但你只需要运行一次。如果您的实体数据集是 live ,那么您可以添加触发器以自动维护 entities_type 关联表。

根据后续步骤,维护三个不同的表而不是像这样的标记表可能更聪明。我希望它可以让你开始吧。

create table entities_type as

select 'post', contentId
  from entities
  join posts using(contentId)

union all

select 'comments', contentId
  from entities
  join comments using(contentId)

union all

select 'replies', contentId
  from entities
  join replies using(contentId)
;