powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Секционирование
8 сообщений из 8, страница 1 из 1
Секционирование
    #40049882
Squamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Помогите решить такую задачу!
Есть таблица заказов клиентов, которую хочу секционировать, но по "хитрому".
Чтобы была одна секция в которую всегда был insert по-умолчанию, а по мере "старения"
данных, перемещать их вручную в "архивные" секции.
Объясню зачем так:
Мне удобней написать SELECT ONLY FROM , чтобы получить "живые" данные, а для получения данных из архива
просто SELECT FROM .
С декларативным описанием Postgres 12 не могу получить такую структуру таблицы (и соответственно всех ее подчиненных).
А если идти через INHERITS , то писать доп. триггеры не очень хочется.

P.S> Сейчас сделано через схемы: 2014-год,2015-год... и чтобы выбрать данные по всей базе (шеф просит) нужно писать через union

Заранее спасибо!
...
Рейтинг: 0 / 0
Секционирование
    #40049914
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Squamis,

Вы хотите очень странного. Зачем вам движение всех данных по прошествии какого-то времени, если оно “само” так работает?

Если сделать обычное RANGE секционирование, скажем, по месяцам, то все INSERT-ы будут всегда лететь в заведомо известную секцию (никаких триггеров не надо даже). И выбирать можно из текущей партиции, хотя я тут тоже не вижу никакого смысла.
...
Рейтинг: 0 / 0
Секционирование
    #40049915
Squamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Согласен, полностью.
Но, хочу чтобы в основной части программы все "летало", используя только "живые" данные.
А в статистиках "шерстило" по всей базе.

Range не очень спасает, т.к. заказы могут длится 2-3 месяца, при этом он считается "живым"
и запросам придется лезть в "старые секции", а хотел бы выбирать только из одной, пока сам не решу, что заказ старый и переместить его в "архив".

Как-то так. Понимаю - бред. Но, вдруг у кого-то "мысля-идея" придет в голову :)
...
Рейтинг: 0 / 0
Секционирование
    #40049927
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так добавьте поле статус заказа и по нему секционируйте
...
Рейтинг: 0 / 0
Секционирование
    #40049938
Squamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это хорошая идея, спасибо.
А есть ли возможность у заказов со статусом "архивный" разделить на дополнительные секции. Например:

таблица orders
1. Секция - orders_live (живые заказы)
2. Секция - orders_archive (архивные заказы)
2.1. Субсекция - 2020.01 за январь
2.2. Субсекция - 2020.02 за февраль
....
2.n. Субсекция - ....
...
Рейтинг: 0 / 0
Секционирование
    #40049956
Misha111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
докаСами секции могут представлять собой секционируемые таблицы, благодаря применению так называемого вложенного секционирования. В секциях могут быть определены свои индексы, ограничения и значения по умолчанию, отличные от других секций. Индексы должны создаваться для каждой секции независимо. Подробнее о секционированных таблицах и секциях рассказывается в описании CREATE TABLE.

например
...
Рейтинг: 0 / 0
Секционирование
    #40075628
lex-sey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вопрос в продолжении темы. У кого то был опыт перемещения отдельных партиций партицированной таблицы в другое табличное пространство? Это возможно? Какие есть ограничения?
...
Рейтинг: 0 / 0
Секционирование
    #40075797
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lex-sey
Вопрос в продолжении темы. У кого то был опыт перемещения отдельных партиций партицированной таблицы в другое табличное пространство? Это возможно? Какие есть ограничения?


Возможно.
Никаких ограничений нет.
Если возможно на время переноса эту партицию убрать вообще из данных то будет еще и без лишних блокировок.
Последовательность операций:
ALTER TABLE [ IF EXISTS ] name
DETACH PARTITION partition_name
ALTER TABLE ALL IN TABLESPACE name [ OWNED BY role_name [, ... ] ]
SET TABLESPACE new_tablespace [ NOWAIT ]
ALTER TABLE [ IF EXISTS ] name
ATTACH PARTITION partition_name { FOR VALUES partition_bound_spec | DEFAULT }
Но лучше проверить на тестовой базе конечно.

Ну или pg_repack -s, --tablespace=TBLSPC move repacked tables to a new tablespace
в помощь там совсем легко и просто.


--
Maxim Boguk
лучшая поддержка PostgreSQL: dataegret.ru
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Секционирование
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]