1
CREATE SCHEMA plugin_work_queue;

CREATE TABLE IF NOT EXISTS plugin_work_queue.plugin_executions
(
    execution_key        bigserial   NOT NULL,
    tenant_id            uuid        NOT NULL,
    creation_time        timestamptz NOT NULL,
    message              bytea       NOT NULL
)
PARTITION BY RANGE (creation_time);


CREATE SCHEMA partman;
CREATE EXTENSION pg_partman WITH SCHEMA partman;


SELECT partman.create_parent(p_parent_table => 'plugin_work_queue.plugin_executions',
                             p_control => 'creation_time',
                             p_type => 'native',
                             p_interval=> 'daily',
                             p_premake => 30
           );

所以我有一个很像上面描述的数据库。这行得通,我可以按creation_time 对数据进行分区。

但理想情况下,我实际上希望有两个级别的分区。我想先分区tenant_id然后再分区creation_time

不幸的是,我还没有发现这很简单。

  1. pg_partman 不支持按 uuid 进行分区。好吧,我可以提取 uuid 的低 4 个字节并将其用作分区键。

  2. pg_partman 似乎不支持通过哈希进行分区,我相信这是管理它的理想方式(但我不确定)。

  3. 子分区的文档在 pg_partman 中有点不理想。

我想让诸如“删除此租户分区”或“删除日期早于 X 的分区”之类的操作变得容易,因此需要分层分区。

4

0 回答 0