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

#1 16/05/2014 11:34:25

DjangoPuccino
Membre

[résolu] Requête sur un champs HSTORE ( mot clé "IN" )

Bonjour à vous,

J'utilise postgresql 9.1. J'ai une table avec un client hstore, dont voici la description :

Table "dev.client_data"
       Column        |           Type           |                        Modifiers                         
---------------------+--------------------------+----------------------------------------------------------
 id                  | integer                  | not null default nextval('client_data_id_seq'::regclass)
 description         | character varying(255)   | not null
 long_description    | text                     | not null
 client_id           | integer                  | 
 parent_id           | integer                  | 
 created_date        | timestamp with time zone | not null
 last_updated_date   | timestamp with time zone | not null
 deleted             | smallint                 | not null
 list_attributes     | hstore                   | 
 form_id             | integer                  | not null
 client_data_type_id | integer                  | not null

Je souhaiterais requêter dans le hstore de la manière suivante :

planeterh=> select list_attributes from client_data where client_data_type_id=2 and list_attributes->'10' IN (select id from client_data where client_data_type_id=3);
ERROR:  operator does not exist: text = integer
LINE 1: ...e client_data_type_id=2 and list_attributes->'10' IN (select...
                                                             ^
HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.

Sachant que le résultat de la sous requête "select id from client_data where client_data_type_id=3" me donne comme résultat une liste de INT, je souhaiterai donc pouvoir caster en string.

Sachant que la requête suivante passe correctement :

planeterh=> select list_attributes from client_data where client_data_type_id=2 and list_attributes->'10'='23';
-[ RECORD 1 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Science fiction", "5"=>"tout ce qui est livres de sciences fiction", "10"=>"23"
-[ RECORD 2 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Romans historiques", "5"=>"tout ce qui est romans historiques", "10"=>"23"
-[ RECORD 3 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Récits de voyage", "5"=>"tout ce qui est récit de voyage", "10"=>"23"

J'ai compris que le HSTORE attends une donnée de type string mais comment faire pour requêter sur une liste de valeurs comme avec le mot clé IN ??

Merci par avance pour votre aide.
Si vous avez des sources renseignant un peu plus que la documentation officielle sur les requetages possibles avec exemple sur hstore, je veux bien.

Merci beaucoup!

Dernière modification par DjangoPuccino (16/05/2014 12:03:36)

Hors ligne

#2 16/05/2014 11:57:49

arthurr
Membre

Re : [résolu] Requête sur un champs HSTORE ( mot clé "IN" )

Bonjour,

je souhaiterai donc pouvoir caster en string

postgres=# select 42::text;
 text 
------
 42
(1 row)

Par contre, aucune idée de savoir si le IN va fonctionner avec le Hstore

Hors ligne

#3 16/05/2014 12:01:05

DjangoPuccino
Membre

Re : [résolu] Requête sur un champs HSTORE ( mot clé "IN" )

arthurr a écrit :

Bonjour,

je souhaiterai donc pouvoir caster en string

postgres=# select 42::text;
 text 
------
 42
(1 row)

Par contre, aucune idée de savoir si le IN va fonctionner avec le Hstore

J'ai tenté ta solution et donc la requête suivante :

select list_attributes from client_data where client_data_type_id=2 and list_attributes->'10' IN (select id::text from client_data where client_data_type_id=3);
-[ RECORD 1 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Science fiction", "5"=>"tout ce qui est livres de sciences fiction", "10"=>"23"
-[ RECORD 2 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Combats", "5"=>"tout ce qui est jeux vidéos de combats", "10"=>"24"
-[ RECORD 3 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Aventure", "5"=>"tout ce qui est jeux vidéos de aventure", "10"=>"24"
-[ RECORD 4 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Romans historiques", "5"=>"tout ce qui est romans historiques", "10"=>"23"
-[ RECORD 5 ]---+--------------------------------------------------------------------------------------
list_attributes | "4"=>"Récits de voyage", "5"=>"tout ce qui est récit de voyage", "10"=>"23"

Ca fonctionne, merci beaucoup !

Hors ligne

Pied de page des forums