Postgres - 内置的自动和动态分区

Posted

技术标签:

【中文标题】Postgres - 内置的自动和动态分区【英文标题】:Postgres - built-in automatic and dynamic partitions 【发布时间】:2019-11-24 16:14:39 【问题描述】:

我已经(因为我使用 postgresql 9.6)按范围继承分区表

日期为 2019-11-01 的分区如下所示:

client_id,product_id,date,orders
1,1,2019-11-01, 100
1,2,2019-11-01, 200
2,3,2019-11-01,150
2,4,2019-11-01,160 

我了解到,自 postgresql 10 以来,分区表可以以不同的方式处理和定义并内置

由于我当前继承的分区仅按日期不同,因此对于每个客户端,我有一个查询将从 X 分区中提取数据,该分区包含所有客户端的数据。

我想知道我是否可以创建一个新的主表,该表将基于范围(日期)和客户端 ID(列表)具有“子表”,然后如果我查询 X 和 Y 之间范围的特定客户端,则执行程序将执行到仅包含该客户和该时间范围的数据的特定文档。

我也想知道是否有简单的无需像我今天那样为每个日期创建分区表。

谢谢。

【问题讨论】:

您可能对pg_partman.感兴趣 【参考方案1】:

您可以使用子分区来做到这一点(分区表的分区本身可以被分区)但是这样做可能会导致分区数量的组合爆炸;这可能会适得其反。

我也想知道有没有像我今天做的那样简单而无需为每个日期创建分区表的方法。

没有。声明式分区不会自动为您创建分区。您仍然需要手动完成,或者编写脚本,或者创建触发器来完成它(IMO 不是一个好的选择)

【讨论】:

以上是关于Postgres - 内置的自动和动态分区的主要内容,如果未能解决你的问题,请参考以下文章

批量动态新增分区表

Hive分区(静态分区+动态分区)

动态分区和静态分区的区别

Apache Spark 动态分区 OverWrite 问题

Starrocks默认100个表分区的解决方案

什么是hive的静态分区和动态分区,hive动态分区详解