Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / секционирование таблицы на которую есть внешние FK / 16 сообщений из 16, страница 1 из 1
02.08.2016, 10:34
    #39284376
Legushka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
секционирование таблицы на которую есть внешние FK
поставили задачу секционировать таблицу на партиции, но загвоздка в том, что на эту таблицу через FK ссылаются полста других таблиц

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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


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

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

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


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