|
1 | 1 | \section{Pg\_partman} |
2 | 2 |
|
3 | | -Поскольку реализация партиционирования реализована не полноценно в PostgreSQL (для управлением партициями и данных в них приходится писать функции, тригеры и правила), то существует расширение, которое автоматизирует полностью данный процесс. \href{https://github.com/keithf4/pg\_partman}{PG Partition Manager}, он же pg\_partman, это расширение для создания и управления партициями и партициями партиций (sub-partitoning) в PostgreSQL. Поддерживает партрицирование по времени (time-based) или по последованности (serial-based). Для партрицированию по диапазону значений (range) существует отдельное расширение \href{https://github.com/moat/range\_partitioning}{Range Partitioning (range\_partitioning)}. |
| 3 | +Поскольку реализация партиционирования реализована неполноценно в PostgreSQL (для управления партициями и данными в них приходится писать функции, тригеры и правила), то существует расширение, которое автоматизирует полностью данный процесс. \href{https://github.com/keithf4/pg\_partman}{PG Partition Manager}, он же pg\_partman, это расширение для создания и управления партициями и партициями партиций (sub-partitoning) в PostgreSQL. Поддерживает партицирование по времени (time-based) или по последованности (serial-based). Для партицирования по диапазону значений (range) существует отдельное расширение \href{https://github.com/moat/range\_partitioning}{Range Partitioning (range\_partitioning)}. |
4 | 4 |
|
5 | | -Текущая реализация поддерживается только INSERT операции, которые перенаправляют данные в нужную партицию. UPDATE операции, которые будут перемещать данные из одной партиции в другую не поддерживаются. При попытке вставить данные, на которые нет партиции, pg\_partman перемещает их в <<мастер>> (родительскую) таблицу. Данный вариант предпочтительнее, чем создавать автоматически новые партиции, поскольку это может привести к созданию десятков или сотен не нужных дочерных таблиц из-за ошибки в самих данных. Функция \lstinline!check_parent! позволят проверить попадение подобных данных в родительскую таблицу и решить, что с ними требуется делать (удалить или использовать \lstinline!partition_data_time/partition_data_id! для создания и переноса этих данных в партиции). |
| 5 | +Текущая реализация поддерживает только INSERT операции, которые перенаправляют данные в нужную партицию. UPDATE операции, которые будут перемещать данные из одной партиции в другую, не поддерживаются. При попытке вставить данные, на которые нет партиции, pg\_partman перемещает их в <<мастер>> (родительскую) таблицу. Данный вариант предпочтительнее, чем создавать автоматически новые партиции, поскольку это может привести к созданию десятков или сотен ненужных дочерных таблиц из-за ошибки в самих данных. Функция \lstinline!check_parent! позволят проверить попадение подобных данных в родительскую таблицу и решить, что с ними требуется делать (удалить или использовать \lstinline!partition_data_time/partition_data_id! для создания и переноса этих данных в партиции). |
6 | 6 |
|
7 | 7 | Данное расширение использует большинство атрибутов родительской таблицы для создания партиций: индексы, внешние ключи (опционально), tablespace, constraints, privileges и ownership. Под такое условие попадают OID и UNLOGGED таблицы. |
8 | 8 |
|
9 | | -Партициями партиций (sub-partitoning) поддерживаются разных уровней: time->time, id->id, time->id и id->time. Нет лимитов на создания таких партиций, но стоит помнить что большое число партиций влияет на производительность родительской таблицы. Если размер партиций станет слишком большим, то придется увеличивать \lstinline!max_locks_per_transaction! параметр для базы данных (64 по умолчанию). |
| 9 | +Партициями партиций (sub-partitoning) поддерживаются разных уровней: time->time, id->id, time->id и id->time. Нет лимитов на создание таких партиций, но стоит помнить, что большое число партиций влияет на производительность родительской таблицы. Если размер партиций станет слишком большим, то придется увеличивать \lstinline!max_locks_per_transaction! параметр для базы данных (64 по умолчанию). |
10 | 10 |
|
11 | | -В PostgreSQL 9.4 появилась возможность создания пользовательских фоновых воркеров и динамически загружать их во время работы базы. Благодаря этому в pg\_partman есть собственный фоновый воркер, задача которого запускать \lstinline!run_maintenance! функцию каждый заданный промежуток времени. Если у Вас версия PostgreSQL ниже 9.4, то придется воспользоватся внешним планировщиком для выполнения данной функции (например cron). Задача данной функции проверять и автоматически создавать партиции и опционально чистить старые. |
| 11 | +В PostgreSQL 9.4 появилась возможность создания пользовательских фоновых воркеров и динамически загружать их во время работы базы. Благодаря этому в pg\_partman есть собственный фоновый воркер, задача которого запускать \lstinline!run_maintenance! функцию каждый заданный промежуток времени. Если у Вас версия PostgreSQL ниже 9.4, то придется воспользоватся внешним планировщиком для выполнения данной функции (например cron). Задача данной функции - проверять и автоматически создавать партиции и опционально чистить старые. |
12 | 12 |
|
13 | 13 | \subsection{Пример использования} |
14 | 14 |
|
@@ -43,7 +43,7 @@ \subsection{Пример использования} |
43 | 43 | \item \lstinline!pg_partman_bgw.interval!~--- количество секунд между вызовами \lstinline!run_maintenance! функции. По умолчанию 3600 (1 час); |
44 | 44 | \item \lstinline!pg_partman_bgw.role!~--- роль для запуска \lstinline!run_maintenance! функции. По умолчанию postgres. Разрешена только одна роль; |
45 | 45 | \item \lstinline!pg_partman_bgw.analyze!~--- запускать или нет \lstinline!ANALYZE! после создания партиций на родительскую таблицу. По умолчанию включено; |
46 | | - \item \lstinline!pg_partman_bgw.jobmon!~--- разрешить или нет использовать \lstinline!pg_jobmon! расширение для мониторинга, что партрицирование работает без проблем. По умолчанию включено; |
| 46 | + \item \lstinline!pg_partman_bgw.jobmon!~--- разрешить или нет использовать \lstinline!pg_jobmon! расширение для мониторинга, что партицирование работает без проблем. По умолчанию включено; |
47 | 47 | \end{itemize} |
48 | 48 |
|
49 | 49 | Далее подключаемся к базе данных и активируем расширение: |
|
0 commit comments