Разделение PostgreSQL - это, по сути, группа представлений, использующих проверочное ограничение для проверки того, что в каждом разделе содержатся только правильные данные.Создается родительская таблица и создаются дополнительные разделы, которые наследуются от мастера:
CREATE TABLE measurement (
city_id int not null,
logdate date not null,
peaktemp int,
unitsales int
);
CREATE TABLE measurement_y2006m02 ( ) INHERITS (measurement);
CREATE TABLE measurement_y2006m03 ( ) INHERITS (measurement);
...
CREATE TABLE measurement_y2007m11 ( ) INHERITS (measurement);
CREATE TABLE measurement_y2007m12 ( ) INHERITS (measurement);
CREATE TABLE measurement_y2008m01 ( ) INHERITS (measurement);
Очевидно, что я пропустил немного кода, но вы можете проверить документацию по Разделение таблиц PostgreSQL.Самая важная часть секционирования - убедиться, что вы создаете автоматические сценарии для создания новых разделов в будущем, а также объединяете старые разделы.
Оперативно, когда PostgreSQL запускает ваш запрос, он смотрит на SELECT * FROM measurement WHERE logdate BETWEEN '2006-02-13' AND '2006-02-22';
Оптимизатор говорит: «Ага, ха! Я знаю, что здесь, есть раздел. Я просто посмотрю на таблицу measurement_y2006m02
и извлеку соответствующие данные».
По мере старения данных из основных разделов вы можете либо просто удалить старые таблицы, либо объединить их в архивный раздел.Большая часть этой работы может быть автоматизирована с помощью сценариев - все, что вам действительно нужно, это написать сценарии один раз и протестировать их.Дополнительным преимуществом является то, что старые данные, как правило, не изменяются - многие разделы не требуют обслуживания индексации или очистки.
Имейте в виду, что разбиение в значительной степени является решением для управления данными и может не обеспечивать выигрыша в производительности, который вынаходясь в поиске.Настройка запросов, применение индексов и проверка конфигурации PostgreSQL (postgresql.conf, конфигурации хранилища и конфигурации ОС) могут привести к гораздо большему приросту производительности при разделении ваших данных.