Re: Fonctions sur JSON

From: Nicolas Baccelli <nicolas(dot)baccelli(at)gmail(dot)com>
To: Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr>
Cc: pgsql-fr-generale <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: Fonctions sur JSON
Date: 2015-06-03 08:38:55
Message-ID: CAJcqnA3ftstmAdv4EPmWxfC2TJQ5A8-h0_w5Hv2KYHmhai0TjA@mail.gmail.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Bonjour,

Avec ce genre de fonction ?

WITH T AS (
SELECT '{"A":"NULL","B":"NULL","C":"NULL"}' AS accuse, 1234 valeur
UNION
SELECT '{"A":"2015-06-02","B":"NULL","C":"NULL"}', 5678
UNION
SELECT '{"A":"2015-06-01","B":"2015-06-02","C":"2015-06-03"}', 1011
)
SELECT (select max(replace(value::text,'NULL','1970-01-01')::date) from
json_each(accuse::json) limit 1) as date_accuse, valeur
FROM T
WHERE position('NULL' IN accuse::text) = 0
group by
t.valeur,t.accuse
having max((select max(replace(value::text,'NULL','1970-01-01')::date) from
json_each(accuse::json) limit 1)) < now() at time zone 'edt';

J'ai l'impression que cela fait ce que vous voudriez

Cordialement

Adoptons des gestes responsables :
Je vous recommande de n’imprimer ce mail que si nécessaire.

Le 3 juin 2015 10:17, Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr> a
écrit :

> Précision :
>
> Je suis en version 9.3.
> Pas de JsonB a disposition
>
> *Frédéric Gaërel*
>
> Expert Domaine Transport. Référent PostgreSQL
> 01 74 22 82 22 | | frederic(dot)gaerel(at)chronopost(dot)fr
>
> [image: Logo Chronopost]
> Immeuble Orsud - 3/5 avenue Gallieni - CS 70103 - 94254 Gentilly Cedex |
> chronopost.fr <http://www.chronopost.fr/>
> Suivez nous sur Facebook <https://fr-fr.facebook.com/chronopost> et
> Twitter <https://twitter.com/chronopost>.
>
> [image: DPD Group]
>
> Le 2 juin 2015 16:51, Frederic Gaerel <frederic(dot)gaerel(at)chronopost(dot)fr> a
> écrit :
>
>> Bonjour à tous.
>>
>> J'ai une table contenant une colonne "accusé de réception" sous la forme
>> d'un json :
>> exemple :
>>
>> WITH T AS (
>> SELECT '{"A":"NULL","B":"NULL","C":"NULL"}' AS accuse, 1234 valeur
>> UNION
>> SELECT '{"A":"2015-06-02","B":"NULL","C":"NULL"}', 5678
>> UNION
>> SELECT '{"A":"2015-06-01","B":"2015-06-02","C":"2015-06-03"}', 1011
>> )
>> SELECT accuse::json, valeur into tmp_json FROM T;
>>
>> SELECT * FROM tmp_json;
>>
>> Le principe est le suivant : A, B et C sont des clients qui viennent
>> positionner leurs accuses de réception spécifiques lors de la récupération
>> de la 'valeur'.
>>
>> Si une ligne a été lue par tous les clients, elle est candidate à la
>> purge.
>>
>> Lors de la purge, je dois supprimer toutes les lignes :
>>
>> - qui ont été lues par tous les clients : WHERE position('NULL'
>> IN accuse::text) = 0 (ici seule la ligne avec la valeur 1011 est
>> "purgeable")
>> et
>> - dont le MAX des accusés de réception ("2015-06-03") est strictement
>> inférieur à la date du jour : AND .... Là je sèche !!!
>>
>> Une idée pour résoudre ce problème ?
>>
>> Merci d'avance
>>
>>
>> *Frédéric Gaërel*
>>
>> Expert Domaine Transport.
>> | frederic(dot)gaerel(at)chronopost(dot)fr
>>
>> [image: Logo Chronopost]
>> Immeuble Orsud - 3/5 avenue Gallieni - CS 70103 - 94254 Gentilly Cedex |
>> chronopost.fr <http://www.chronopost.fr/>
>> Suivez nous sur Facebook <https://fr-fr.facebook.com/chronopost> et
>> Twitter <https://twitter.com/chronopost>.
>>
>> [image: DPD Group]
>>
>
>

In response to

Responses

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Dimitri Fontaine 2015-06-03 08:48:37 Re: Fonctions sur JSON
Previous Message Frederic Gaerel 2015-06-03 08:17:13 Re: Fonctions sur JSON