Поиск без учета регистра в базе данных с индексом? - PullRequest
4 голосов
/ 31 июля 2010

Я использую Postgres.

У меня есть таблица Artices в моей базе данных с URL-адресом столбца для URL-слагов.Это сделано для того, чтобы я мог отображать статьи в этой таблице на веб-сайте не как «example.com/23323», а как «example.com/Funny_Thing_Happened_to_Me».Это было достаточно просто реализовать, и затем, по мере роста количества статей, я добавил индекс в таблицу URL-слагов.

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

Существует ли простой способ быстроговыполнять поиск по текстовому столбцу без учета регистра, а также обеспечивать уникальность с учетом регистра?

Я пытался выполнить поиск с помощью чего-то вроде lower(url) =, но это заставляет Postgres принять решениене использовать индекс вообще.

Ответы [ 2 ]

7 голосов
/ 31 июля 2010

Использовать функциональный индекс :

CREATE UNIQUE INDEX ix_test1 on articles (lower(url));

Если вы используете 8.4 и можете установить модуль contrib, посмотрите также citext тип.Он отвлекает все нижнее / верхнее и немного лучше работает.

1 голос
/ 31 июля 2010
SELECT * FROM sometable WHERE textfield ILIKE 'value%';

Это то, что вы ищете? Что вы подразумеваете под «навязывать уникальность без учета регистра»?

Или это, если вы хотите придерживаться "lower ()":

SELECT * FROM sometable WHERE UPPER(textfield) LIKE (UPPER('value') || '%');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...