большую табличку в postgresql.
Я так понимаю, есть два варианта:
- Создать копию таблицы через create table partition by, после чего создавать партиции
- Сразу создавать партиции через наследование (INHERITS).
Отсюда есть вопросы:
1) Партиции - это полноценные таблицы в БД, которые отжирают место на диске?
2) Если использовать наследование, то данные в партициях будут являться копиями или нет? То есть в оригинальной таблице они останутся? Это важно, так как если они просто копируются, то получается по итогу создания партиций место на диске сильно уменьшится, так как по сути произойдет полное копированиие таблицы
3) Я так понимаю, все манипуляции есть смысл сначала обкатать на бэкапе, верно?
4) Если юзать первый метод партиционирования (классический), то при копировании данных может закончиться место. Как лучше копировать данные и сразу их удалять из оригинальной таблицы? Батчи? Или есть какой-то более красивый путь, так как удалять данные - как то стремно всегда
1. да, полноценные таблицы 2. надо уже встроенное декларативное использовать, а не наследование 3. конечно! 4. надо так поступать: выбрать точку перехода (день, граница недели или месяца); создать новую головную таблицу с партициями вперёд от точки; в текущей таблице сделать CHECK CONSTRAINT и NOT NULL для колонки партиционирования; подцепить старую таблицу к новой как “большую историческую”; постепенно оптимизировать большую таблицу удобным способом
3) нет вы что, сразу на продакшене в прайм тайм)
более жесткий контроль над схемой; партиционированные индексы; возможности оптимизатора; автоматическое направление строк в нужную партицию (без триггеров). доступно во всех поддерживаемых версиях Postgres-а. наследование использовалось только для партиций. в данный момент надо сразу декларативное начинать использовать
Обсуждают сегодня