Форум программистов, компьютерный форум, киберфорум
PostgreSQL
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 10.05.2018
Сообщений: 3

Секционирование

02.03.2021, 15:35. Показов 1467. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Помогите решить такую задачу!
Есть таблица заказов клиентов, которую хочу секционировать, но по "хитрому".
Чтобы была одна секция в которую всегда был insert по-умолчанию, а по мере "старения"
данных, перемещать их вручную в "архивные" секции.
Объясню зачем так:
Мне удобней написать SELECT ONLY FROM, чтобы получить "живые" данные, а для получения данных из архива
просто SELECT FROM.
С декларативным описанием Postgres 12 не могу получить такую структуру таблицы (и соответственно всех ее подчиненных).
А если идти через INHERITS, то писать доп. триггеры не очень хочется.

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

Заранее спасибо!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2021, 15:35
Ответы с готовыми решениями:

Разбиение (секционирование) в PostgreSQL
в общем есть база на 29 млн строк. в нее идет постоянная запись и из нее нужно тоже постоянно получать данные. партицирование вроде...

Секционирование таблицы по году совершения сделки
Здравствуйте, У меня есть таблица sdelka (Её содержимое это: id_sdelka int auto_increment primary key, data date not null, summa...

Полный бэкап MySQL с ежедневными партициями (секционирование по дням)
Всем добрый день. Для понятности: Вопрос состоит в том, что не могу разобраться с партициями. Конкретно в том, как выполняется...

4
1263 / 977 / 384
Регистрация: 02.09.2012
Сообщений: 3,021
04.03.2021, 09:43
Мне видится, что при таком желании только вручную делать.
Для стандартного декларативного подхода так не полчится сделать.
Хотя не очень ясно желание в принципе разделять запросы.
Пишите одинаково, а уже в какую партицию попадет - это база сама решит.
В этом собственно и смысл.
0
0 / 0 / 0
Регистрация: 10.05.2018
Сообщений: 3
04.03.2021, 09:48  [ТС]
Спасибо! Уже помогли найти решение.
Вручную - не так страшно, как ждать .... ответа от сервера
Я просто приучил своих пользователей мгновенной реакции программы
на их действия и они теперь при малейшей задержке все бегут ко мне.
А я устал отвечать - база пухнет и т.д.
0
0 / 0 / 0
Регистрация: 22.03.2017
Сообщений: 4
05.03.2021, 06:13
Если не затруднит, опубликуйте тут решение.
Чтоб помочь другим людям в решении их проблем.
0
0 / 0 / 0
Регистрация: 10.05.2018
Сообщений: 3
05.03.2021, 09:38  [ТС]
Без проблем! И так моя задача (для меня) была такой.

Исходные данные:
- Есть заказы клиентов (таблица)
- Есть продукты заказов (таблица)
- Есть материалы продуктов (таблица)
- Есть операции над материалами (таблица)
- Есть характеристики (параметры) продуктов (таблица)
- "пухнут" как и у всех

Желания:
- Разделить заказы на "живые" и "архивные"
- Доступ к данным через один и тот же запрос
- Скорость выборки-отклика программы
- Использовать минимальное количество телодвижений при дальнейшем обслуживании
- Индексы это хорошо, но маленькие индексы - лучше (опять таки - для меня!)
- Я сам должен решать когда "живые" данные становятся "архивными".
- При добавлении новых полей, они должны быть и в архиве для отработки одних и тех же запросов

P.S. Приучил своих пользователей к комфортной работе. А теперь при малейших задержках - бегут и кричат тормозит!!

Решение:
- Использовал декларативное объявление таблиц. (
SQL
1
partition BY range
)
- Создал все таблицы и разбил на 2 уровня вложенности. Первый уровень: года - 2010, 2011, ... Второй уровень: ID (от 1..10, 11..20, ....)
- Для "живых" данных использую год 2000, для остальных - реальный.
- Вставка данных с учетом разбиения идет автоматом, благодаря самому Postgres.
- Внешние ключи с версии 12 теперь можно подключать к конкретным секциям, т.е. целостность БД сохраняется.
- Индексы уменьшились
- Очень старые данные можно отключать (использовать не буду, т.к. шеф у меня любит статистику )
- Во всех запросах (по-тихоньку и где нужно) пропишу дополнительное условие:
SQL
1
WHERE fldarchive = any(:id_year)
и база начнет выборку только в нужном маленьком диапазоне. А в конкретных случаях вообще -
SQL
1
WHERE fldarchive = any(:id_year) AND id BETWEEN 1 AND 10
- Ну, осталось дело за малым, перемещение данных между годами. Это вручную (как и раньше с помощью функции). Для БД это не хорошо, но у нас есть окна, в которых можно это делать без особой нагрузки на сервак.

Как-то так! Я не претендую ни на что, я лишь рассказал какое решение меня устроило.
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2021, 09:38
Помогаю со студенческими работами здесь

СЕКЦИОНИРОВАНИЕ
Есть задача, таблицу я создам и все свяжу, но нужно создать секционирование: Построить информационно-логическую модель базы данных,...

Секционирование таблиц
Всем привет. Помогите разобраться с секционированием таблиц. Как с ныне существующей таблицы сделать секционированные. Разбить на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru