PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 31/08/2011 15:08:32

charleydc5
Membre

Problème de casse dans les requêtes PostgreSQL

Bonjour à tous,

Je migre présentement plusieurs applications de MSSQL et IBM DB2 vers PostgreSQL 9.0.3 et j'éprouve un problème assez important que j'aimerais régler au niveau de la base de données.

Mes applications sont Web et programmées en Java EE avec Entreprise Java Beans (EJB) pour la couche métier. La plupart de interactions entre mes applications et la base de données se font via des requêtes EJB, par exemple:

 * @ejb.finder
 *     	view-type = "local"
 *     	query = "SELECT OBJECT(u) FROM User AS u WHERE (u.intUserId <> ?1) AND (u.strUserLoginName = ?2) AND (u.booArchive = false)"
 *     	signature = "stirq.orrc.ejb.entity.User findByLoginName(java.lang.Integer intUserId, java.lang.String strUserLoginName)"

Dans la requête ci-dessus, on tente d'authentifier l'utilisateur lorsqu'il se connecte à l'application pour voir s'il a accès. Depuis la migration vers PostgreSQL, j'ai certains utilisateurs qui n'avaient plus accès. Après plusieurs recherches, j'ai découvert que ceci avait un lien avec la casse du nom d'utilisateur dans la base de données PostgreSQL.

J'ai donc fait un UPDATE pour mettre tous les noms d'utilisateurs en majuscule. Par contre, j'aimerais bien rendre PostgreSQL insensible à la casse et aux accents car ceci m'éviterait beaucoup de "refactoring".

J'ai vu des solutions de rechange comme ILIKE, mais ceci n'est pas une option puisque je ne code pas les requêtes manuellement dans PostgreSQL via une fonction. Nous utilisons EJBQL qui lui traduit le tout en PostgreSQL via le pilote JDBC (postgresql-9.0-801.jdbc4.jar).

Merci pour votre aide et bonne journée


Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)

Hors ligne

#2 31/08/2011 15:30:02

gleu
Administrateur

Re : Problème de casse dans les requêtes PostgreSQL

J'ai donc fait un UPDATE pour mettre tous les noms d'utilisateurs en majuscule. Par contre, j'aimerais bien rendre PostgreSQL insensible à la casse et aux accents car ceci m'éviterait beaucoup de "refactoring".

Quand vous parlez utilisateur, vous parlez utilisateurs PostgreSQL (donc dans pg_role) ou utilisateurs applicatif (dans une table utilisateur) ?

Dans tous les cas, quelle requête SQL ajoute l'utilisateur ?


Guillaume.

Hors ligne

#3 31/08/2011 15:42:33

charleydc5
Membre

Re : Problème de casse dans les requêtes PostgreSQL

Utilisateur applicatif.

Nous avons une table dans laquelle tous les utilisateurs sont enregistrés. L'ajout de l'utilisateur se fait via l'application à l'aide des EJB (JSP > Struts ActionForm > Struts Action (DispatchAction) > EJB Session Bean > EJB Entity Bean.

À la toute fin, la méthode suivante est appelée pour sauvegarder le nouvel utilisateur à partir d'un ValueObjet précédemment populé à partir des données saisies dans le formulaires :

    /**
     * Create method
     * 
     * @ejb.create-method view-type = "local"
     */
    public void ejbCreate(UserValue userValue)
        throws javax.ejb.CreateException {
        this.setDatCreation(new Date());
        this.setValue(userValue);
    }

Merci


Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)

Hors ligne

#4 31/08/2011 16:23:34

gleu
Administrateur

Re : Problème de casse dans les requêtes PostgreSQL

Faut arrêter de me causer EJB car je n'y connais rien wink

Vous pouvez utiliser le type citext (qui est disponible en module contrib) pour avoir une recherche insensible à la casse sans avoir à utiliser ILIKE et compagnie. En dehors de ça, ce n'est pas possible.


Guillaume.

Hors ligne

#5 31/08/2011 16:26:04

charleydc5
Membre

Re : Problème de casse dans les requêtes PostgreSQL

Merci pour l'info par rapport à citext.

Je suppose qu'il est possible de faire une conversion de varchar à citext sans trop de problème?


Charles Morin
PostgreSQL 9.0.3 sur Windows 2008 Server Standard (x64)

Hors ligne

#6 31/08/2011 16:52:51

gleu
Administrateur

Re : Problème de casse dans les requêtes PostgreSQL

Oui.


Guillaume.

Hors ligne

Pied de page des forums