powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / секционирование таблицы на которую есть внешние FK
16 сообщений из 16, страница 1 из 1
секционирование таблицы на которую есть внешние FK
    #39284376
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
поставили задачу секционировать таблицу на партиции, но загвоздка в том, что на эту таблицу через FK ссылаются полста других таблиц

хочу обсудить такой путь решения:
для работы FK такой костыль:
1. создать промежуточную таблицу для хранения значения PK из основной таблицы (эта таблица не будет разбиваться на партиции) +
2. целостность этой промежуточной таблицы сделать с помощью тригеров на изменение/вставку/делет в основной таблице
3. заполнить текущую таблицу значениями в ручную
4. все внешние ключи перенастроить на эту промежуточную таблицу

и далее разбиваем основную таблицу на партиции

так же можно немного улучшить: промежуточную таблицу дополнить полем "название таблицы партиции" - что бы точно знать в какой партиции лежит значение, вдруг пригодится

какие еще есть способы сохранить и FK и сделать партицирование, и какие могут быть подводные камни у текущего решения?
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284410
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushkaпоставили задачу секционировать таблицу на партиции, но загвоздка в том, что на эту таблицу через FK ссылаются полста других таблиц


Если что у PostgreSQL есть понятие "наследование таблиц".
Почитайте. Может быть вам поможет.
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284422
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, вам тоже будет наверное интересно что нельзя напрямую наследовать если на таблицу есть внешние FK
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284425
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проблема какрас не в том как наследовать, создавать переносить партиции

а в том что бы сохранить функционал FK, и при разбивке система не ругалась на наличие FK
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284446
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushkaпроблема какрас не в том как наследовать, создавать переносить партиции

а в том что бы сохранить функционал FK, и при разбивке система не ругалась на наличие FK

Понятно.
Я думал, что у вас немного другая задача, а не с явным FK.
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284535
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

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

т.е. кооптировать поле партицирования (если не пк) из головной во все зависимые.

не сработает при множественности связей. (напр. люди в разных ролях ссылаются из одной записи "документ" на разные партиции головной).

------
пс . в центр звезды можно пихать поле партицирования -- для целей оптимизации. но много хенджоба будет.
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284536
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хотя самое популярное решение , какое видел , -- отказаться от поддержки целостности посредством FK, и пытаться поддержать её кодом (палка о 2--х концах)
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284557
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul, qwwq
а как вы считаете у костыля предложенного выше будет шанс на успех? или могут быть подводные камни об которые я еще не спотыкался?
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284587
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
qwwqхотя самое популярное решение , какое видел , -- отказаться от поддержки целостности посредством FK, и пытаться поддержать её кодом (палка о 2--х концах)
Ага, если нужна Referential Integrity + секционирование — много триггеров, pgsql кода и багов...
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284625
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vyegorov,
много кода страшно только по одной причине: я не могу повлиять на разработку за пределами текущей основной таблицы, например навешать тригеры на зависящие от моей основной таблицы
там рулят другие отделы, и они сами если решили что должна быть целостность то навешиывают FK иначе могут и не делать
мне главное предоставить возможность создавать FK на мою таблицу и быстро отдавать данные которые здесь и сейчас.
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284668
Фотография djeday84
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

Какой знакомый проэхт ))) с медициной связано ?
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284739
Alexius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

а какой размер у таблицы (в ГБ)? может обойтись можно без партициирования? оно не всегда полезно.
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284957
Фотография vyegorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka…там рулят другие отделы…
Когда в базе данных нет хозяина — человека, который бы взял на себя ответственность за модель данных и соблюдение стандартов наименования, целостности, бэкапов, разработки и т.д. — жди беды! Терпеть ненавижу коллективную ответственность...
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39284988
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushkaпоставили задачу секционировать таблицу на партиции, но загвоздка в том, что на эту таблицу через FK ссылаются полста других таблиц

хочу обсудить такой путь решения:
для работы FK такой костыль:
1. создать промежуточную таблицу для хранения значения PK из основной таблицы (эта таблица не будет разбиваться на партиции) +
2. целостность этой промежуточной таблицы сделать с помощью тригеров на изменение/вставку/делет в основной таблице
3. заполнить текущую таблицу значениями в ручную
4. все внешние ключи перенастроить на эту промежуточную таблицу

и далее разбиваем основную таблицу на партиции

так же можно немного улучшить: промежуточную таблицу дополнить полем "название таблицы партиции" - что бы точно знать в какой партиции лежит значение, вдруг пригодится

какие еще есть способы сохранить и FK и сделать партицирование, и какие могут быть подводные камни у текущего решения?

Не может быть такой задачи или задача некорректна.
Для решения какой именно проблемы предлагается партиционировать таблицу?
Единственный вариант это сделать нормально - отпартиционировать все полста других таблиц по тому же критерию (но там с планами запросов будет много веселья).


--
Maxim Boguk
www.postgresql-consulting.ru
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39285662
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем стала интересна сама задача, где она, кем инициирована и тд. а не путь ее решения.
во всех источниках, которые я находил по партицированию было написано что нельзя партицировать таблицу, если на нее есть FK

я хочу только зачернкуть нельзя и обсудить это решение. но придется видимо отвечать на все доп вопросы не относящиеся к решению "нельзя".
=)
...
Рейтинг: 0 / 0
секционирование таблицы на которую есть внешние FK
    #39285669
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

партицирование само-по-себе не очень разумная операция.
оправдана она обычно при таких размерах таблицы, когда уже не очень оправданы FK на неё.


но вы не стесняйтесь. поддержание "центра звизды" триггерами я видел. осталось пристроить к ней (звизде) fk, скорее всего -- differable -- и посмотреть, чем вся эта жуть чревата.

как сделаете -- нагрузите и отпишитесь.

ps если не секрет -- у вас там всюду ON DELETE RESTRICT , или и CASCADE бывают ?
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / секционирование таблицы на которую есть внешние FK
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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