Я про свой запрос.
Ну вот попробовал я как-то партиционировать (на данных, "приближенных к реальным", но всего около 1M записей ;) ).
Вышло 15 partitions по timestart (с неравномерным распределением, т.е. где-то 20K записей, где-то 100K).
И вот запрос (без partitions):
EXPLAIN (ANALYZE, BUFFERS)
SELECT timestart, (max(timeend)) as timeend,
insideip as internalip, outsideip as externalip, startport, endport
FROM flowlog_real
WHERE (timeend = 0 OR timeend >= 1512143634) — time_from
AND timestart <= 1512146131 — time_to
AND insideip = '10.128.26.23'
GROUP BY timestart, insideip, outsideip, startport, endport
ORDER BY timestart, insideip, outsideip;
Даёт:
Buffers: shared hit=32
Planning time: 0.721 ms
Execution time: 0.413 ms
Тогда как (из партиционированной таблицы):
EXPLAIN (ANALYZE, BUFFERS)
SELECT timestart, (max(timeend)) as timeend,
insideip as internalip, outsideip as externalip, startport, endport
FROM flowlog_real_partitioned
WHERE (timeend = 0 OR timeend >= 1512143634) — time_from
AND timestart <= 1512146131 — time_to
AND insideip = '10.128.26.23'
GROUP BY timestart, insideip, outsideip, startport, endport
ORDER BY timestart, insideip, outsideip;
Buffers: shared hit=98
Planning time: 5.362 ms
Execution time: 1.141 ms
Это native (declarative) partitioning из 10-ки, pg_pathman у меня нет.
Но никакого partition elimination не происходит, конечно.