172 похожих чатов

Да ниже дочитал что все же нельзя хотя выше написано

что можно
Но как же в таком случае соблюдать это ограничение?

20 ответов

19 просмотров

Уникальное ограничение — это уникальный индекс. Уникальные индексы у каждой партиции физически отдельные. Если создать уникальный индекс по полю, не связанному с партицированием то получится, что уникальность проверяется только в рамках одной партиции. Поэтому возможны только такие уникальные индексы, у которых поля партицирования являются префиксом (как и вообще все индексы должны начинаться с полей партицирования)

alex che
Уникальное ограничение — это уникальный индекс. Ун...

если у меня поле партиционирования это id (pk) - то уникальности никакой не будет если я его добавлю в ограничение

Да никак, это известное ограничение партицый постгрес.

Хорошая новость: чаще всего вам это не очень и нужно. Если вы в первый раз с этим столкнулись — то 100% не нужно.

Ilya Anfimov
Последнее-то вы с чего взяли?

Мне надо подумать... Наверное, если индекс не партицированный, а консолидированный, то невозможно отцепить партицию. Поэтому он должен быть тоже партицированный

alex che
Мне надо подумать... Наверное, если индекс не парт...

В постгресе нет консолидированных индэксов (и это не имеет отношэния к вопросу).

Ilya Anfimov
Хорошая новость: чаще всего вам это не очень и нуж...

ну как же не нужно - нам не нужны в таблице конфликты!

Вадим Бударин Бударин
ну как же не нужно - нам не нужны в таблице конфли...

Вам, скорее всего, и партицыонирование-то не нужно.

Ilya Anfimov
Вам, скорее всего, и партицыонирование-то не нужно...

секционирование нужно - потому что документов (мусора) будет уйма и они спустя время совсем не нужны будут

Вадим Бударин Бударин
если у меня поле партиционирования это id (pk) - т...

Во всяком случае, придумать use-case, в котором есть числовой id и нужны партицыи — довольно сложно.

Вадим Бударин Бударин
секционирование нужно - потому что документов (мус...

Во-первых, в таком случае партицыонируют по дате или по полю "в архив". Ну, включая это поле (часть поля) в pk, да. Во-вторых, чаще всего выигрыш от truncate или detach partition — не стоит вообще усилий. Во-третьих, какая вам разница — ну, будут дубликаты появляться до детача архивов, а не после. Факта дубликатов это не отменяет.

Ilya Anfimov
Во-первых, в таком случае партицыонируют по дате ...

но мне же не нужно всю таблицу документов очищать - нужно удалять будет старые документы (в ручную в архив их никто переводить не будет)

Вадим Бударин Бударин
но мне же не нужно всю таблицу документов очищать ...

Ещё раз: смысл какой-то в этом появляется для нормальной нагрузки когда размеры таблицы переваливают за несколько тэрабайт. Лучшэ в районе 10. А так -- DELETE замечательно работает, особенно на SSD.

Ilya Anfimov
Во-первых, в таком случае партицыонируют по дате ...

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

Ilya Anfimov
Ещё раз: смысл какой-то в этом появляется для норм...

ну понятно что DELETE на большой таблице потребует и время и ресурсы

Вадим Бударин Бударин
ну понятно что DELETE на большой таблице потребует...

То, чем вы занимаетесь называется "преждевременная оптимизацыя". Она с вероятностью 1 приведёт к тому жэ, к чему обычно -- вы заплатите приличным дополнительным геморроем за то, что у вас всё будет работать несколько медленнее.

Ilya Anfimov
То, чем вы занимаетесь называется "преждевременная...

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

Ilya Anfimov
То, чем вы занимаетесь называется "преждевременная...

И да, дело тут, конечно, в том, что в Postgres плохое партицыонирование. Было бы хорошэе -- можно было бы лепить его куда ни попадя по принцыпу "хужэ не будет". Но партицыонирование тут уж какое есть.

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Ребят в СИ можно реализовать ООП?
Николай
33
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Карта сайта