2017-08-16 4 views
0

Actuellement, je travaille sur la création de données dans une colonne, "filename", pour qu'elles ne soient pas sensibles à la casse lorsqu'elles sont recherchées ou comparées. Dans les fichiers DB, j'ai des fichiers avec les noms SAMPLE.txt et sAMple.Txt. ... Et je veux obtenir tous ces fichiers avec le même nom quand j'exécutePSQL insensible à la casse INDEX lower() ne fonctionne pas

SELECT * from files where filename='sample.txt' 

Alors, je fait un index par cette commande ...

CREATE INDEX files_lower_fnames_idx ON files ((lower(filename))); 

Il a été créé avec succès. Mais lors de l'exécution ...

SELECT * from files where filename='sample.txt' 

-il encore retourné 0 lignes.

Ai-je raté quelque chose? Nous vous remercions de votre aide.

+0

sûrement il vous suffit SELECT * à partir de fichiers où inférieur (nom de fichier) = « sample.txt » – jimmy8ball

+0

Vous pouvez également choisir la collation de table pour être le cas sans accent sensible sample.txt alors serait le même que sample.txt – jimmy8ball

Répondre

1

il retournait toujours 0 lignes.

Création d'un index a aucun effet sur les résultats d'une requête, seule la performance de la requête. Si elle renvoyait 0 lignes avant la création de l'index, elle devrait l'être également après.

Je ne peux pas dire à coup sûr pourquoi il est de retour 0 lignes, puisque vous ne l'avez pas montré les données du tableau. Mais si c'est comme vous le décrivez, alors

SELECT * from files where filename='sample.txt' 

ne correspond pas. Vous avez besoin soit une colonne citext, ou de faire une affaire requête insensible comme

SELECT * from files where lower(filename)='sample.txt' 

Cette requête devrait être en mesure d'utiliser l'index créé pour courir plus vite.

+0

Entendue . Je vous remercie! :) –