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 04/08/2014 12:35:21

DjangoPuccino
Membre

[résolu] Order By dans un Hstore

Bonjour à vous,

j'ai un problème lorsque je tente d'effectuer une requête select avec ORDER BY sur un champs de type hstore.
Certaines lignes ne possèdent pas tous les attributs du HSTORE, du coup lorsque je fais mon ORDER BY, si le champs n'existe pas dans le hstore, une erreur sort.

Voici la requête : (le champ hstore est "list_attributes)

ma_base => SELECT id, list_attributes FROM client_data WHERE deleted<>1 AND client_data_type_id=2 ORDER BY (list_attributes->'8')::int DESC;
ERROR:  invalid input syntax for integer: ""
ma_base => SELECT id, list_attributes FROM client_data WHERE deleted<>1 AND client_data_type_id=2;
-[ RECORD 1 ]---+-------------------------------------------------------------------------------------------------------------------------
id              | 89
list_attributes | "3"=>"MON BLOC SANS TAILLE 2", "8"=>"", "14"=>"", "16"=>NULL, "19"=>""
-[ RECORD 5 ]---+-------------------------------------------------------------------------------------------------------------------------
id              | 64
list_attributes | "3"=>"Quatrième bloc", "15"=>"1"
-[ RECORD 6 ]---+-------------------------------------------------------------------------------------------------------------------------
id              | 63
list_attributes | "3"=>"MON 3EME BLOC", "8"=>"54", "14"=>"", "15"=>"1", "16"=>NULL, "19"=>"ceci est mon 3eme bloc"

On voit notamment que la ligne 64 ne possède pas l'attribut "8". Si toutes les lignes avaient cet attribut, même pour valeur nulle, le tri fonctionnerait sans problème.
Y a t-il un moyen d'effectuer une condition afin de ne faire le order by seulement si le champ existe ou quelque chose du genre?

Merci beaucoup par avance!

Dernière modification par DjangoPuccino (04/08/2014 15:21:14)

Hors ligne

#2 04/08/2014 21:16:01

gleu
Administrateur

Re : [résolu] Order By dans un Hstore

Comme apparemment vous avez résolu tout seul votre problème, ce serait sympa de partager votre solution.


Guillaume.

Hors ligne

#3 05/08/2014 17:15:48

DjangoPuccino
Membre

Re : [résolu] Order By dans un Hstore

En fait, dans les données, on peut voir que l'attribut "8" du HSTORE avait pour valeur une chaine de caractère vide "". C'était le problème.
J'ai modifié mon code afin que lors de l'enregistrement des données, si la valeur est nulle, le champ contiendra NULL et non une chaine vide. Grâce à cela, PostgreSQL n'a plus de problème pour caster en INT.

Merci à vous et désolé pour l'oubli.

Hors ligne

#4 05/08/2014 17:36:18

gleu
Administrateur

Re : [résolu] Order By dans un Hstore

OK, parfait. Merci.


Guillaume.

Hors ligne

Pied de page des forums