Keith Fiske:使用pg_partman在Postgres中进行时间分区和自定义时间间隔

Keith Fiske:使用pg_partman在Postgres中进行时间分区和自定义时间间隔

💡 原文英文,约2000词,阅读约需8分钟。
📝

内容提要

pg_partman是PostgreSQL的时间分区功能,允许用户灵活和自定义分区间隔。用户可以选择预设间隔或设置自己的间隔,如每周或每季度。文章提供了示例并解释了如何在特定的星期几或月份开始分区。还讨论了版本4.6.0中修复的一个错误,允许在使用任意周间隔时四舍五入到最近的一周。总体而言,pg_partman为时间分区提供了全面的支持。

🔎

延伸解读

周分区的起始日选择

pg_partman 的周分区默认以运行 create_parent() 的当天作为每周起始日,这可能导致分区边界不符合业务习惯。通过 p_start_partition 参数指定一个起始日期,即可让周分区从任意星期几开始。例如,指定一个周日日期,后续分区都会以周日为起点。这增加了灵活性,但需注意分区命名和边界会相应改变。

季度分区的自定义起始月份

季度分区默认从运行 create_parent() 的月份开始,可能并非业务财季的起始月。使用 p_start_partition 参数指定一个日期,pg_partman 会以该日期所在月份作为季度起始,后续每 3 个月一个分区。这样就能让季度分区对齐自定义的财季,而无需依赖默认行为。

任意周间隔的舍入问题与修复

当分区间隔为任意周数(如 9 周)时,pg_partman 默认会按“月”舍入边界,导致起始日不符合预期。版本 4.6.0 新增 p_date_trunc_interval 参数,可指定按“周”舍入,从而让分区边界从指定的周起始日开始。但需注意,date_trunc('week') 总是舍入到周一,因此无法让任意周间隔从周日或其他星期几开始。

❓

Q&A

pg_partman是什么?

pg_partman是PostgreSQL的时间分区功能,支持灵活和自定义的分区间隔。

如何在pg_partman中设置自定义的分区间隔?

用户可以在创建父表时通过p_interval字段设置自定义的分区间隔,如每周或每季度。

pg_partman支持哪些分区间隔?

pg_partman支持多种分区间隔,包括每日、每周、每月和每季度等。

如何指定每周分区的开始日期?

可以在创建父表时使用p_start_partition参数指定每周分区的开始日期。

pg_partman的版本4.6.0修复了什么问题?

版本4.6.0修复了一个错误,允许在使用任意周间隔时四舍五入到最近的一周。

如何创建季度分区并自定义开始月份?

可以在创建父表时设置p_start_partition参数,以自定义季度分区的开始月份。

🏷️

标签

➡️

继续阅读