Pokud potřebujete "kombinovat s rozlišováním malých a velkých písmen", existuje řada možností v závislosti na vašich přesných požadavcích.
Možná nejjednodušší je, aby se v indexu výrazu nerozlišovala malá a velká písmena.
Na základě funkce f_unaccent()
uvedeno v odkazované odpovědi:
- Podporuje PostgreSQL kolace „necitlivá na akcent“?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));
Potom:
SELECT *
FROM users
WHERE lower(f_unaccent(name)) = lower(f_unaccent('João'));
Nebo můžete vytvořit lower()
do funkce f_unaccent()
, odvodit něco jako f_lower_unaccent()
.
Nebo (zejména v případě, že přesto potřebujete provést fuzzy porovnávání vzorů) můžete použít index trigramů, který poskytuje doplňkový modul pg_trgm staví na výše uvedené funkci, která také podporuje ILIKE
. Podrobnosti:
- LOWER LIKE vs. ILIKE
K odkazované odpovědi jsem přidal poznámku.
Nebo můžete použít doplňkový modul citext :
- Odložitelné jedinečné omezení nerozlišující malá a velká písmena