首页 > 解决方案 > 不能在 postgresql 中将声明性分区与继承结合起来

问题描述

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

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

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

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

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

有任何想法吗?

标签: postgresqlinheritancetable-partitioning

解决方案


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

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

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

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

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

如果是,您可以编写一个事件触发器,在创建分区表时修改视图。


推荐阅读