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

Добрый вечер! Странный и профанский вопрос - подскажите, пожалуйста Есть таблица и

колонка, по которой делается самый обычный индекс:
CREATE INDEX ON table_name column_name;
Реально ли обмануть постгрю и подменить этот индекс на индекс, например, с данными, сведёнными к нижнему регистру, в духе:
CREATE INDEX ON table_name USING btree (lower(column_name));
Так, чтобы на запрос
SELECT * FROM table_name WHERE column_name=val;
выдавались результаты (очевидно, не всегда верные) с помощью этого индекса?

14 ответов

7 просмотров

а зачем именно обманывать постгрес?

Боря-Бейлинсон Автор вопроса
central hardware
а зачем именно обманывать постгрес?

чтобы поменять логику, но сохранить обратную совместимость для старых данных

Боря Бейлинсон
чтобы поменять логику, но сохранить обратную совме...

а что мешает просто перестроить индекс? и использовать его всегда?

Боря-Бейлинсон Автор вопроса

большой объём данных, довольно неприятная процедура получается с перестроением индекса. Но, вероятно, придётся

Боря Бейлинсон
большой объём данных, довольно неприятная процедур...

Это самый очевидный вариант, выбираете время, когда меньше всего нагрузки и все

Боря Бейлинсон
большой объём данных, довольно неприятная процедур...

что неприятного и причем тут объем? делаете новый индекс хоть всю ночь, потом заменяете старый на него

Легче в запросе SELECT * FROM tab WHERE lower(col) = LOWER(val);

Rashid
Легче в запросе SELECT * FROM tab WHERE lower(col)...

это потребует новый функциональный индекс

Боря-Бейлинсон Автор вопроса
D
что неприятного и причем тут объем? делаете новый ...

да, замена хороший вариант, спасибо!

Боря-Бейлинсон Автор вопроса

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

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

ну сделайте два индекса, вам места не хватит что ли? новые запросы будут автоматически брать новый индекс, если where под него подходит. А когда все клиенты перейдут, старый удалите

Боря-Бейлинсон Автор вопроса
D
ну сделайте два индекса, вам места не хватит что л...

да, похоже, это самый разумный вариант!

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

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

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
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
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта