Разделение PostgreSQL 101

Мы можем определить до и после разбиения на разделы в Postgres. Сейсмический сдвиг произошел в PG 10 (2017), когда впервые появился декларативный подход к разделению.

Подход к разделению до PG 10 был очень громоздким для реализации и обслуживания, но это не относится к новому подходу.

Начиная с PG 10 и до сих пор, каждый выпуск PG улучшал DDL и функциональные возможности, которые мы рассмотрим сейчас.

Знакомство с DDL для базового секционирования

Это был новый подход, который позволил нам использовать PG 10, который позволяет нам разбивать по диапазону, например по дате:

Учитывая предыдущую таблицу, у нас может быть две стратегии разделения для диапазона: диапазон и список.

(PG 11 дала нам еще один вариант «Хэш», который мы рассмотрим в следующем посте)

Давайте проверим эти две стратегии из PostgreSQL 10:

RANGE: диапазон значений для каждого секционированного столбца

СПИСОК: список значений для каждого секционированного столбца.

ДИАПАЗОН

Сначала давайте посмотрим, как создать раздел с помощью Range. На следующем снимке экрана обратите внимание, что здесь у разделов есть имя, означающее, что они не являются анонимным объектом.

Каждому разделу назначается диапазон значений для раздела. В следующем случае вы создаете раздел за январь 2019 года.

Другой вариант — определить раздел путем присоединения таблицы, в которой уже могут быть данные:

Важно отметить: Интервал «От — до» закрыт слева, открыт справа, то есть за микросекунду до той величины, которую вы указали в значении «До». Этот подход особенно полезен, чтобы избежать проблем с дополнительными секундами и других крайних случаев.

Если вы знакомы с секционированием до PG 10, ничего больше не нужно, чтобы получить кортеж в партиции, никаких триггеров, никаких правил, ничего!, это большое улучшение не только в простоте, но и в производительность, что дает огромное 10-кратное улучшение по некоторым показателям.

Вы также можете сделать разделы для 2 столбцов, но, насколько я знаю, это не очень полезно, так как не существует общеизвестного варианта использования этой функции, и в силу краткости здесь мы не будем проверять этот вариант использования в дальнейшем. деталь.

СПИСОК разбиения

Мы будем использовать ENUM в качестве списка с его кратким DDL и другими функциями (которые вы можете проверить в моих статьях о ENUM).

Легко сделать таблицу клиентов, где каждый клиент из южноамериканской страны.

Как вы можете видеть в следующих двух таблицах на иллюстрации, вы можете легко определить раздел для каждого клиента в Колумбии или раздел, который смешивает клиентов из Аргентины и Чили.

На сегодня все, в следующий раз рассмотрим разбиение по хешу :-)

Спасибо Альваро Эррере за предоставление всей основы для этой статьи. Подпишитесь на него @alvherre