PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Accento PostgreSQL + ricerca senza distinzione tra maiuscole e minuscole

Se devi "combinare con case insensitive", sono disponibili diverse opzioni, a seconda delle tue esatte esigenze.

Forse la cosa più semplice, rendi l'indice dell'espressione insensibile alle maiuscole.

Basandosi sulla funzione f_unaccent() disposto nella risposta di riferimento:

  • PostgreSQL supporta le regole di confronto "insensibili all'accento"?
CREATE INDEX users_lower_unaccent_name_idx ON users(lower(f_unaccent(name)));

Quindi:

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

Oppure potresti costruire il lower() nella funzione f_unaccent() , per ricavare qualcosa come f_lower_unaccent() .

Oppure (soprattutto se devi comunque eseguire la corrispondenza dei modelli fuzzy) puoi utilizzare un indice trigram fornito dal modulo aggiuntivo pg_trgm basandosi sulla funzione precedente, che supporta anche ILIKE . Dettagli:

  • MI PIACE INFERIORE vs iMI PIACE

Ho aggiunto una nota alla risposta di riferimento.

Oppure potresti usare il modulo aggiuntivo citext :

  • vincolo univoco differibile, senza distinzione tra maiuscole e minuscole