【问题标题】:cannot combine declarative partitioning with inheritance in postgresql不能在 postgresql 中将声明性分区与继承结合起来
【发布时间】:2021-11-27 05:32:26
【问题描述】:

我们有几个表必须继承另一个表。 该计划是能够使用公共属性在不同表之间执行查询,但也可以对父表执行查询以进行分析。除此之外,可能需要编辑父表和子表中的数据。子表已经拥有所有必要的列,并且我们成功地继承了其中的几个。

现在我们遇到了一个按年份和季度分区的巨大表的问题(声明性分区):

[42809]: ERROR: cannot change inheritance of a partition.

另一种选择是使用联合,但如果没有继承,我们将需要创建可编辑视图或类似的东西,并在每次需要另一个分区表时更改它们......或者我们可能会切换到仅继承,只是出于兼容性原因。

我已经尝试过继承分区 - 效果不佳。

有什么想法吗?

【问题讨论】:

  • 必须继承另一个表” - 为什么“必须”他们继承?
  • @a_horse_with_no_name 这不是必须的,它是为了让数据分析师和开发人员保持简单。我们正在管理不同业务线和业务部门的相似数据,这些数据存储在不同的源系统中。数据通常具有共同的“分母”,例如地理或地址,或注册商编号。通过使用继承,我们可以同时管理所有的表(例如在父表中添加一个列并将其添加到子表中),并且可以按业务对象(子)和每个数据对象(父)表查询数据。
  • 我们将研究 TimescaleDB 超表的使用。看起来它使用简单的继承而不是声明性分区。如果一切正常,问题将得到解决。然而,这不会在明年 2 月之前发生......

标签: postgresql inheritance table-partitioning


【解决方案1】:

您不能在继承树中拥有分区或分区表,因为分区在“底层”使用继承。

“A”分区表听起来像是一个单独的表。

在这种情况下,您可以使用结合了继承父级和分区表的视图:

CREATE VIEW world AS
      SELECT * FROM parent_table
   UNION ALL
      SELECT * FROM partitioned_table;

是的,当您想要另一个分区表时,您必须调整该表,但是这种情况总是发生,所以修改视图太麻烦了?

如果是,您可以编写一个event trigger,在创建分区表时修改视图。

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 2018-01-15
    • 1970-01-01
    • 2014-08-08
    • 2014-02-19
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2010-11-07
    相关资源
    最近更新 更多