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