Разделение базы данных postgres по идентификатору клиента и времени
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. Хорошо, я могу извлечь 4 младших байта uuid и использовать их как ключ раздела.
pg_partman, похоже, не поддерживает разбиение по хешу, что, я считаю, было бы идеальным способом справиться с этим (но я не уверен).
Документация для подразделов в pg_partman не совсем идеальна.
Я хотел бы упростить такие операции, как «удалить разделы этого клиента» или «удалить разделы старше даты X», отсюда и желание многоуровневого разделения.