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

Подскажите, нужно сделать поиск по полям регистронезависимый для всей базы

для всех полей. Таблицы в UTF-8. Как в настройках сервера постгри указать, что поиск должен не учитывать регистр? Какой коллейт и где нужно прописать?

39 ответов

27 просмотров

расширение citext?

Delphi-Photo Автор вопроса
Morruth🏴‍☠️
расширение citext?

пробовал, производительность в приложении упала

Delphi-Photo Автор вопроса
Роман Жарков
Explain analyse?

после эксперимента уже вернул все в зад, оставив varchar(34)

Delphi-Photo Автор вопроса
Роман Жарков
Ну, тоже метод.

а глобальная настройка коллейта не спасет отца русской демократии?

Delphi Photo
а глобальная настройка коллейта не спасет отца рус...

Ну, как минимум грузить медленнее не должно.

Delphi Photo
пробовал, производительность в приложении упала

Эээ... а как Вы это себе иначе представляете, извините (каким бы то ни было методом)?

Yaroslav Schekin
Эээ... а как Вы это себе иначе представляете, изви...

Насколько я понимаю, время сравнения строк в ci-collation типично всё равно несопостваимо с остальным поиском индэкса и tuple deforming.

Сопоставимо или нет — это дело второе, суть в том, что [на обычном железе] иначе не может быть.

Yaroslav Schekin
Сопоставимо или нет — это дело второе, суть в том,...

Если это нельзя померить — то как можно говорить, что это есть?

Yaroslav Schekin
Сопоставимо или нет — это дело второе, суть в том,...

И я, кстати, не знаю, какие алгоритмы применены в collation — так что вот не 100% уверен, что там реальная сложность как-то отличается.

Ilya Anfimov
Если это нельзя померить — то как можно говорить, ...

В некоторых ситуациях разницу между доступом по индексу и без... и т.д. и т.п. нельзя померить — как можно говорить, что это есть? ;) Кроме шуток — разница между обычными и case-insensitive сравнениями будет существенно влиять на результат, если в запросе их требуется выполнить много (или много самих таких запросов). > что там реальная сложность как-то отличается. Вы сравниваете сложность "делать что-то" vs "не делать ничего", между прочим.

Yaroslav Schekin
В некоторых ситуациях разницу между доступом по ин...

Так в этих ситуацыях её и нет. Но... Я просто не вижу большой алгоритмической разницы. Там (в libc или в icu) есть какие-то несколько чисел, привешэнных каждому символу. Они ищутся, видимо, в каком-то дереве, которое не сильно отличается для ci/не-ci. С чего там будет большая разница — я вот просто не очень понимаю.

Ilya Anfimov
Так в этих ситуацыях её и нет. Но... Я просто не ...

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

И ужэ по этой таблицэ видно, что "your mileage may vary". В итоге — в одном месте icu/case insensitive дажэ обогнало всех (в том жэ месте glibc отстало катастрофически и проиграло только citext), в другом месте icu/case insensitive отстало катастрофически, и проиграло только citext, и вообще все три подхода показали совершэнно разные результаты. (Кроме одного — что citext отсатёт).

А Вы-то написали что, а? Так я напомню (из вредности): > Но... Я просто не вижу большой алгоритмической разницы. А разница не только есть, она (в некоторых ситуациях) составляет один-два порядка! > С чего там будет большая разница — я вот просто не очень понимаю А между тем, такие причины существуют (эти результаты совсем не случайны).

Yaroslav Schekin
А Вы-то написали что, а? Так я напомню (из вреднос...

>А разница не только есть, она (в некоторых ситуациях) составляет один-два порядка! Судя по тому, что в разных случаях эта разница в разную сторону — это не алгоритмические проблемы, а какие-то ещё?

Yaroslav Schekin
А Вы-то написали что, а? Так я напомню (из вреднос...

К тому жэ, два порядка тут разве что двоичных.

Ilya Anfimov
>А разница не только есть, она (в некоторых ситуац...

Так реализованы сравнения (collation algorithms), и существенно лучшей реализации (для каждого случая, кроме citext) никто нам не сможет показать, мне кажется. Т.е. тут проблема не в том, что у кого-то "руки кривые". > К тому жэ, два порядка тут разве что двоичных Кхе-кхе... 5820 / 621 ≈ 10, а 25102 / 702 ≈ 36. Двоичных порядков тут куда побольше. ;)

Yaroslav Schekin
Так реализованы сравнения (collation algorithms), ...

Ну, 25102 — это citext, с которым как раз всё понятно. А 5820, учитывая, что делает он примерно тожэ самое, что 702 — вполне ясно, что это какие-то внутренние проблемы постгреса.

Ilya Anfimov
Ну, 25102 — это citext, с которым как раз всё поня...

Знаете что... да сколько можно уже?! Я и раньше слышал эти Ваши сказки про "внутренние проблемы постгреса" (насчёт партиционирования и т.п.) в подобных ситуациях. У меня уже складывается впечатление, что каждый раз, как Вы чего-то не знаете, так начинается вот это вот. Короче говоря, если Вы это утверждаете — покажите нам, как надо, не стесняйтесь, "гуру" Вы наш. ;( А пока тут простая дилемма — либо разработчики PostgreSQL, ICU и libc не умеют писать код, либо Вы ошибаетесь. И лично я знаю, на что я ставлю.

Yaroslav Schekin
Знаете что... да сколько можно уже?! Я и раньше с...

> покажите нам, как надо, не стесняйтесь, "гуру" Вы наш. ;( Не требуется быть поваром, чтобы оцэнить вкус борща!

Yaroslav Schekin
Знаете что... да сколько можно уже?! Я и раньше с...

>PostgreSQL, ICU и libc не умеют писать код, л И я этого не говорил. Про postgres — так прямо и не согласен! Это твоё личное мнение, что такие небольшые детали свидетельствуют о неумении писать код!

Ilya Anfimov
>PostgreSQL, ICU и libc не умеют писать код, л И ...

> Не требуется быть поваром, чтобы оцэнить вкус борща! А кем надо быть, чтоб пытаться свысока судить о программистах куда получше себя, а? ;) > что такие небольшые детали свидетельствуют о неумении писать код! Это не "небольшие детали", а краеугольный камень производительности примерно всех операций с текстами в PostgreSQL. И оптимизировалось в этой области всё не раз (и ещё будет, скорее всего) — код там [далеко] не "наивный".

Yaroslav Schekin
> Не требуется быть поваром, чтобы оцэнить вкус бо...

И как это в итоге получилось, что в этом "ненаивном" коде glibc отстаёт от ICU в разы? На примерно одной и той жэ операцыи? Как hash join отстаёт — ещё понятно (хотя там тожэ есть что поправить) — а вон тот, результат в первом столбцэ как в такой супер-оптимизированной системе получился-то?

Ilya Anfimov
И как это в итоге получилось, что в этом "ненаивно...

Потому что они делают (должны делать, в смысле) существенно разные вещи. Но что касается именно авторов libc... тут у меня тоже есть сомнения, это да. ;)

Yaroslav Schekin
Потому что они делают (должны делать, в смысле) су...

>Но что касается именно авторов libc.. Кстати, в индэксном случае — там наоборот icu проиграло libc (и тожэ на ровном месте, видимо).

Ilya Anfimov
Кто "они"? strcoll() в GLIBC и ucoll_strcoll() в I...

Да. Т.е. то, как определяются collations, и как они должны работать, в libc и ICU отличается очень существенно — несмотря на то, результаты в тривиальных случаях 1:1. ;)

Нет же? "Обычный" случай libc — это default. Collation | ORDER BY val | Search (hashing) | Search (index-only scan) ------------------+--------------+------------------+-------------------------- default | 5820 | 630 | 7684 ICU | 702 | 688 | 4527

А, я большэ в sqlize.online смотрю — там libc выигрывает в три раза.

Yaroslav Schekin
Нет же? "Обычный" случай libc — это default. Coll...

То есть опять, зависимость от collation есть — но в цэлом во-первых результаты сопоставимы, во-вторых нельзя сказать, что кто-то вот так сразу тормозит большэ...

Ilya Anfimov
А, я большэ в sqlize.online смотрю — там libc выиг...

Да это запросто может быть просто "шум" — данных там слишком мало, чтобы делать какие-то выводы. На то (в том числе) и был этот sqlfiddle — чтобы каждый мог у себя попробовать, на более адекватных размерах (и известных значениях shared_buffers и т.п.). > но в цэлом во-первых результаты сопоставимы Разница почти 70%, всё же. И ICU в среднем явно лучше.

Yaroslav Schekin
Да это запросто может быть просто "шум" — данных т...

То есть в среднем case sensitive collation окажэтся лучшэ, просто потому, что дефолт у нас glibc, а этот — icu...

Ilya Anfimov
Ну, 25102 — это citext, с которым как раз всё поня...

Просто для информации — вот сейчас (через знакомых) удалось добраться до автора citext (David Wheeler), и на [вежливый] вопрос в стиле "Что это за @$%^ня, неужели так должно быть?!" он ответил: "That sounds like how I recall it working, yes." Выводы делайте какие хотите. ;(

Yaroslav Schekin
Просто для информации — вот сейчас (через знакомых...

Да в общем, от него и отказались потому, что подход так себе. В частности, и по скорости.

Ilya Anfimov
Да в общем, от него и отказались потому, что подхо...

Так в PostgreSQL от него пока не отказались, потому что 100% замены-то тупо нет (https://www.postgresql.org/docs/current/collation.html ): "B-tree cannot use deduplication with indexes that use a nondeterministic collation. Also, certain operations are not possible with nondeterministic collations, such as pattern matching operations. Therefore, they should be used only in cases where they are specifically wanted."

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

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

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Всем привет, нужна как никогда, нужна помощь с IO в загрузчике. Пишу в code16 после установки сегментных регистров, пишу вывод символа. Пробовал 2 варианта: # 1 mov $0x0E, %a...
Shadow Akira
14
Карта сайта