PostgreSQL 11中的表分区和自动分区创建?

3

我需要维护审计表,由于更改的数量将会很大,所以我需要一种有效的处理方法。我想到的解决方案是仅在审计表中记录更改的列,并根据 createdon 列每季度或半年对其进行分区。

我想知道是否有类似于 Oracle 的 'interval partition' 的东西?如果没有,我该如何实现它?

我希望每6个月自动创建一个新分区,随着行的插入而完成。

我正在使用 Postgres 11 作为我的数据库。


7
抱歉,Postgres中没有“自动分区创建”功能,无论是11版还是即将发布的12版都没有。如果需要该功能,可以使用https://github.com/pgpartman/pg_partman等工具。但为什么不设置一个每6个月运行一次的cron作业来为接下来的6个月创建分区呢? - user330315
好的,如果没有其他办法,我会这样做的。无论如何,还是谢谢你。 - Karan Gupta
@a_horse_with_no_name,使用触发器不可能吗?(真诚的问题,我需要实现与OP相同的事情)。我的表按列“时间戳”每周分区。 - GG.
1
@GG. - 分区表不能有BEFORE / FOR EACH ROW触发器。 - klin
1个回答

1

我不认为有任何魔法配置可以让您在这一点上更轻松:

https://www.postgresql.org/docs/11/ddl-partitioning.html

如果您想要自动创建表格,我认为您有两个主要选择:

  • 检查“母”表中的每个数据,看它是否适合已经存在的分区(触发器,如果插入的数量很大,可能会有问题)
  • 偶尔检查您将来需要的分区是否已经存在。 对于这个问题,pg_partman将是您最好的盟友。

例如,几年前,当只有声明性分区而没有添加pg_partman的可能性时,我曾经制作了一个分区机制。对于每月1500万行的触发器机制仍然像魅力一样运作。

如果您永远不想损害性能(特别是如果您不知道系统会增长多大),我建议您使用与a_horse_with_no_name评论中相同的响应:使用pg_partman。

如果您无法使用它,就像我一样,采用两种哲学之一(触发器或通过定时任务提前创建表格)。

为什么在PostgreSQL服务器上使用Windows许可证?难道你不能用Linux发行版吗? - Jaisus
2
因为有时它们就是做不到。 - Aurus Huang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接