PostgreSQL метаданные секционированных таблиц
Имеется партицированная таблица
CREATE TABLE IF NOT EXISTS "EventData"
(
"event_id" uuid NOT NULL,
"event_time" timestamp without time zone,
"event_data" text
) PARTITION BY RANGE ("event_time");
Клиент по своей (неизвестной логике) создает партиции от этой таблицы. Необходимо из метаданных БД узнать информацию, по какому значению поля "event_time" создана та или иная партиция.
Ответы (1 шт):
Автор решения: Мелкий
→ Ссылка
Сведения о границах раздела партиции хранятся в pg_class.relpartbound
psql, в частности, достаёт границу раздела таким запросом:
SELECT inhparent::pg_catalog.regclass,
pg_catalog.pg_get_expr(c.relpartbound, c.oid),
inhdetachpending
FROM pg_catalog.pg_class c JOIN pg_catalog.pg_inherits i ON c.oid = inhrelid
WHERE c.oid = '226340';
inhparent | pg_get_expr | inhdetachpending
-------------+--------------------------------------------------+------------------
measurement | FOR VALUES FROM ('2006-03-01') TO ('2006-04-01') | f
Аналогичным pg_get_expr пользуется и pg_dump. Да, только вот таким выражением целиком, зато универсально для любого нативного типа партицирования. Извлекать конкретный from и to для range партицирования придётся самостоятельно.