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
。
不幸的是,我还没有发现这很简单。
pg_partman 不支持按 uuid 进行分区。好吧,我可以提取 uuid 的低 4 个字节并将其用作分区键。
pg_partman 似乎不支持通过哈希进行分区,我相信这是管理它的理想方式(但我不确定)。
子分区的文档在 pg_partman 中有点不理想。
我想让诸如“删除此租户分区”或“删除日期早于 X 的分区”之类的操作变得容易,因此需要分层分区。