Я могу представить, что раздел таблицы по дате (в частности, для журналов) - это что-то широко используемое, но я не могу найти хороший ответ на мою проблему.Postgres раздел по неделям
Я хочу создать раздел таблицы по неделям (количество записей будет большим, чтобы сделать его ежемесячно). Причиной этого является то, что мне нужны данные для алгоритма, который будет искать даты как часть процесса.
Моя проблема заключается в том, что я хочу создать разделы с учетом недели и использовать «типичный» подход, который я должен был бы создать вручную. Что-то вроде этого.
CREATE TABLE measurement_y2013w01 (
CHECK (logdate >= DATE '2013-01-07' AND logdate < DATE '2013-01-14')
) INHERITS (measurement);
CREATE TABLE measurement_y2006w02 (
CHECK (logdate >= DATE '2013-01-14' AND logdate < DATE '2013-01-21')
) INHERITS (measurement);
...
Но я хочу, чтобы это было сделано автоматически. Я не хочу создавать раздел на каждую неделю один за другим.
Мое правило для присвоения имени было бы yYYYYWWW для обозначения раздела или начала datadYYYYMMDD.
Я думал, что в проверке разделов при установке использовать что-то вроде этого:
SELECT
nmsp_parent.nspname AS parent_schema,
parent.relname AS parent,
nmsp_child.nspname AS child,
child.relname AS child_schema
FROM pg_inherits
JOIN pg_class parent ON pg_inherits.inhparent = parent.oid
JOIN pg_class child ON pg_inherits.inhrelid = child.oid
JOIN pg_namespace nmsp_parent ON nmsp_parent.oid = parent.relnamespace
JOIN pg_namespace nmsp_child ON nmsp_child.oid = child.relnamespace
и если раздел не существует создать его перед вставкой, но это швы много неэффективно, учитывая количество вставленных записей ,
Другой альтернативный вариант - иметь внешний процесс, выполняемый еженедельно, создавая этот раздел, но я пытался избежать этого.
Есть ли более эффективное решение для этого, которое я пропускаю, которое используется, например, для ежемесячных проверок?
Вы будете иметь внешнее удаление процесса или перемещение старых разделов не так ли? Если да, то в чем проблема с созданием разделов? –
Возможно, вам стоит взглянуть на pg_partman, который может автоматизировать для вас много вещей, связанных с секционированием: https://github.com/keithf4/pg_partman/blob/master/doc/pg_partman.md –