Разделение базы данных 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.

К сожалению, я не нашел, что это просто.

  1. pg_partman не поддерживает разбиение по uuid. Хорошо, я могу извлечь 4 младших байта uuid и использовать их как ключ раздела.

  2. pg_partman, похоже, не поддерживает разбиение по хешу, что, я считаю, было бы идеальным способом справиться с этим (но я не уверен).

  3. Документация для подразделов в pg_partman не совсем идеальна.

Я хотел бы упростить такие операции, как «удалить разделы этого клиента» или «удалить разделы старше даты X», отсюда и желание многоуровневого разделения.

0 ответов

Другие вопросы по тегам