PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Accent PostgreSQL + recherche insensible à la casse

Si vous avez besoin de "combiner avec insensible à la casse", il existe un certain nombre d'options, en fonction de vos besoins exacts.

Peut-être le plus simple, rendre l'index d'expression insensible à la casse.

S'appuyant sur la fonction f_unaccent() énoncé dans la réponse référencée :

  • PostgreSQL prend-il en charge les classements "insensibles aux accents" ?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));

Ensuite :

SELECT *
FROM   users
WHERE  lower(f_unaccent(name)) = lower(f_unaccent('João'));

Ou vous pouvez construire le lower() dans la fonction f_unaccent() , pour dériver quelque chose comme f_lower_unaccent() .

Ou (surtout si vous avez de toute façon besoin de faire de la correspondance floue), vous pouvez utiliser un index de trigramme fourni par le module supplémentaire pg_trgm s'appuyant sur la fonction ci-dessus, qui prend également en charge ILIKE . Détails :

  • MOINS LIKE vs iLIKE

J'ai ajouté une note à la réponse référencée.

Ou vous pouvez utiliser le module supplémentaire citext :

  • Contrainte unique reportable, insensible à la casse