Вход на сайт
Яндекс.Метрика

Рейтинг@Mail.ru

Postgres партицирование

Партицирование

Партицирование в postgres реализовывается модулем pg_pathman, который предоставляет оптимизированный механизм секционирования, а также функции для создания и управления секциями.

Устанавливаем пакет pg_pathman96.

Активация модуля:

Модифицируйте параметр shared_preload_libraries в postgresql.conf:

shared_preload_libraries = 'pg_pathman'

Обязательно перезапустите экземпляр Postgres.

Затем выполните в psql следующий запрос:

#CREATE EXTENSION pg_pathman;

Готово! Теперь пора перейти к настройке схемы секционирования.

Как создать партиции:

Рассмотрю на примере таблицы history из zabbix

#select create_range_partitions('history','clock',1528765200,86400);

Где 1528765200 - это таймштамп, с которого начинать партицирование, берется из селекта таблицы минимальное значение поля clock (сортировка asc)

И так по каждой партицируемой таблице. В итоге получим партиции и примерно такой конфиг:

#select * from pathman_config;

partrel expr parttype range_interval cooked_expr
trends clock 2 604800 {VAR :varno 1 :varattno 2 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 2 :location 8}
trends_uint clock 2 604800 {VAR :varno 1 :varattno 2 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 2 :location 8}
history clock 2 604800 {VAR :varno 1 :varattno 2 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 2 :location 8}
history_str clock 2 604800 {VAR :varno 1 :varattno 2 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 2 :location 8}
history_uint clock 2 604800 {VAR :varno 1 :varattno 2 :vartype 23 :vartypmod -1 :varcollid 0 :varlevelsup 0 :varnoold 1 :varoattno 2 :location 8}

 

Чтобы удалить партиции и слить их в одну таблицу. Например:

#select drop_partitions('trends_uint'::regclass, false);

 

Как изменить range диапазон партицирования
#select set_interval('trends_uint',604800);

 

unix-way