Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Printemps des cartes 2024

#1 Tue 02 February 2010 14:46

Wheintz
Participant occasionnel
Lieu: Toulouse
Date d'inscription: 12 Sep 2005
Messages: 43

Quel type de champ pour des valeurs multiples dans PostgreSQL ?

Bonjour à tou(te)s,

Je souhaiterais créer dans une table Postgresql un champ contenant une liste de valeurs prédéfinies (type ENUM) et pour lequel il soit possible de sélectionner plusieurs valeurs pour un même enregistrement.
Ce type existe dans Mysql (SET) et je me demandais s'il y avait un équivalent dans Postgresql (je n'ai pas l'impression qu'ENUM permette le choix multiple).

Merci beaucoup pour votre aide.

Wilfried

Hors ligne

 

#2 Tue 02 February 2010 19:21

ChristopheV
Membre
Lieu: Ajaccio
Date d'inscription: 7 Sep 2005
Messages: 3169
Site web

Re: Quel type de champ pour des valeurs multiples dans PostgreSQL ?

Bonjour,

A relire la doc il me semble que ce n'est pas possible, ENUM ne permet effectivement pas le choix multiple.

Par contre il y a la possibilité de faire un type défini par l'utilisateur ce qui impose de créer les fonctions d'entrée et de sortie.

Doc Postgres a écrit:

A user-defined type must always have input and output functions. These functions determine how the type appears in strings (for input by the user and output to the user) and how the type is organized in memory.


Pour ma part j'opterais pour un type chaîne de caractère ou entier long où je coderai les valeurs multiples comme on le fait classiquement en programmation. Par exemple: FontStyle= Bold OR Underline ce qui donne du gras souligné comme format de texte, si j'ai huit valeurs possible j'affecte un rang de bit pour chaque valeur ce qui me donne un entier pour chaque valeur, et un OR sur deux ou huit valeur me donne un entier qui représente la combinaison des valeurs, donc du choix multiple. D'une manière ou d'une autre je pense qu'il faut nécessairement du code.


Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close

Hors ligne

 

#3 Thu 04 February 2010 09:08

JRM
Participant assidu
Lieu: Arras
Date d'inscription: 15 Apr 2009
Messages: 521

Re: Quel type de champ pour des valeurs multiples dans PostgreSQL ?

Les champs multivalués finissent généralement par devenir galère à gérer, pourquoi ne pas opter pour relation un-vers-plusieurs puis utiliser une vue et une agrégation ? Voici un vieil exemple passé sur la liste pgsql-sql :

une relation 1-n Doc > Auteur

CREATE AGGREGATE textcat_all
(
    basetype = text,
    sfunc1 = textcat,
    stype1 = text
);

puis :

SELECT da.DocId, textcat_all( a.Auteur_non || ',' )
FROM docs_auteurs da, auteurs a
WHERE da.auteurId = a.id
GROUP BY da.DocId;

Pour un doc ça te retournera une liste d'auteurs séparé par une virgule

Hors ligne

 

#4 Fri 05 February 2010 15:40

Wheintz
Participant occasionnel
Lieu: Toulouse
Date d'inscription: 12 Sep 2005
Messages: 43

Re: Quel type de champ pour des valeurs multiples dans PostgreSQL ?

Bonjour,

Merci pour vos réponses ... J'avoue que je souhaitais utiliser les champs multivalués pour ne pas me compliquer la tache ... C'est pas gagné !

wilfried

Hors ligne

 

Pied de page des forums

Powered by FluxBB