Re: utilisation d'un array en sortie de select

From: "thomas(dot)silvi" <thomas(dot)silvi(at)laposte(dot)net>
To: jsganaye13-devforum(at)yahoo(dot)fr
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: utilisation d'un array en sortie de select
Date: 2005-09-05 20:42:09
Message-ID: 431CADA1.30201@laposte.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale


Bonjour,
voici plutot des questions / suggestions que des reponses :(

* pourquoi le type array ? et pas plutot n lignes dans statsdata ?

Si cette requete est appelee frequement, cela serait plus simple.

+ requete simple
- ?

Si la precision de la date est limitee a jour/mois/annee, alors une
colonne statcount peut etre ajoutee :
si l'evenement existe alors statcount est incrementee de 1 (update)
sinon insert. Cela prend plus de temps
car c'est un test suivi d'update ou insert, et dans le cas ou il y
aurait beaucoup d'update, il faudrait un vacuum).
Mais la requete n'est plus qu'un simple select avec un filtre sur la
date.

+ requete encore plus simple
- la saisie d'un evement prend plus de temps
- si beaucoup d'evement alors il faut faire des vacuum frequement

* si l'array te semble indispensable, cela pourrait etre
interressant que le tableau soit trie pour minimiser
la taille de la table temporaire qui correspond a l'agregation
temporaire (modestat,evtliste). Mais bon tu utiliseras
quand meme un table function.

Thomas

jsganaye13-devforum(at)yahoo(dot)fr a écrit :

> Bonjour,
>
> j'utilise depuis peu Postgres et j'ai un probleme concernant les array.
> Voici le cas :
>
> j'ai une table du genre :
>
> CREATE TABLE statsdata (
> datestat date NOT NULL DEFAULT '2005-08-31'::date,
> modestat char(1) NOT NULL DEFAULT 'C'::bpchar,
> evtliste varchar(3)[]
> ) WITHOUT OIDS;
>
> je souhaite faire une requete du genre :
>
> SELECT
> evt, -- une ligne pour chaque élément de la
> liste evtliste
> s.modestat,
> count(*) AS statcount
> FROM statsdata s
> WHERE s.datestat = '2005-08-31'
> AND evtliste is not null
> GROUP BY evt, s.modestat;
>
> Le problème est donc que je veux faire une sorte de produit cartésien
> entre les lignes selectionnées dans la table et la liste d'évènement
> (pour chacune des ligne).
>
> Je ne sais pas quoi mettre à la place de evt ou comment modifier la
> requête pour arriver à mes fins.
>
> La seule solution que j'ai envisager est de créer une TABLE FUNCTION
> qui exécute la requête de restriction puis qui pour chaque valeur du
> champ evtliste, retourne une ligne... d'ou quelque chose du genre :
>
> SELECT
> s.evt,
> s.modestat,
> count(*) AS statcount
> FROM getStatDataForDate('2005-09-01') s
> GROUP BY s.evt, s.modestat;
>
> Mais j'espérais trouver une solution plus simple (que d'écrire une
> Table Function) et plus efficace en terme de performance car une fois
> que les données sont lues par la fonction et qu'elle les retourne,
> fini les indexes....
>
>
> Voila, j'espère avoir été claire, si vous avez une solution (ou des
> solutions) ou des pistes à explorer, ça m'intéresse fortement.
>
> merci
> Jean-Sébastien
>
> ------------------------------------------------------------------------
> *Appel audio GRATUIT partout dans le monde* avec le nouveau Yahoo!
> Messenger
> Téléchargez le ici !
> <http://us.rd.yahoo.com/messenger/mail_taglines/default/*http://fr.messenger.yahoo.com>

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Sébastien Dinot 2005-09-06 09:41:13 Jointure externe
Previous Message jsganaye13-devforum 2005-09-01 16:21:21 utilisation d'un array en sortie de select