[postgresql-it] Un dubbio su come eseguire una query su una colonna JSON

  • From: Carlos Catucci <carlos.catucci@xxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Tue, 21 Oct 2014 23:31:14 +0200

Salve a tutti

sono nuovo della lista.
Ho un caso particolarissimo che volevo povare a sottoporvi.
Avendo visto che Pg 9.3+ con colonne SON e' in grado di fornire prestazioni
eccezionali (superiori anche a quelle di MongoDB) coniugando la
possibilita' di averle in tabelle tradizionali con altre colonne
tradiionali (quini un mix che apre possibilita' incredibili), ho rivisto un
mio vecchio progetto (mai messo davevro in opera) dove ho la problematica
di campi variabili in tabella.
Per capiric mi trovo che un record potrebbe avere, per dire, alcuni campi
ed un'altro averne altri magari con un certo numero comuni. Per di poiu
ogni record fa storia a se, non si tratta di campi predefiniti, tipo una
lista dove alcuni possono essere null, ma di campi che vengono definiti man
mano dall'utente.
Per aggirare la cosa avevo studiato una struttura particolare

ID
CODICE
NOME
TIPO
VALORE

dove codice era un campo di raggruppamento (facciamo un esempio culinario,
in codice avremmo ill nome della ricetta, in nome il nome del campo, ad
esempio zuccehero, farina, tempo di cottura) tipo mi dice la tipologia
(ingredienti, tempi ad esempio di realizzazione, di cottura), e valore il
valore da memorizzare.

Con un sistema un poco contorto potevo filtrare tutti i CODICE che
presentavano date caratteristiche (ad esempio tempi di cottura < 30 minuti
e livello di difficolta' di realizzazione facile).

Pero' era un sistema complesso, la query risultatnte abbastanza compelssa
da scrivere ogni volta, etc.

Un campo json risolverebbe tutti i miei problemi. SOlo che io ho necessita'
di una struttura un poco particolare, del tipo quelal che segue

{
   'A': 10,
   'B': 'cane',
   'C': {
     'C1': 11,
     'C2': 'amaranto'
   },
   'D': [
      {
         'D1':  100,
         'D2':  'Gino',
         'D3':  22
       },
      {
         'D1':  30,
         'D3':  55,
         'D4':  'marameo'
       }
   ]
}

Ovviamente il numero di hashtables dentro 'D' cosi' come il numero ed il
tipo di chiavi, sono vaiabili. Anzi in certi casi potrebbe non esistere
neppure una chiave 'D'. Io pero' devo poter cercare tutti i record dove C1
= 11 e D3 < 30.

Purtroppo i tentativi che ho affto non hanno mai dato risultati, mi
chiedevo se qualcuno avesse qualche dritta. Ho cercato su ttutta la
documentazione piu o meno ufficiale.

Grazie
Carlos

-- 
EZLN ... Para Todos Todo ...

Other related posts:

  • » [postgresql-it] Un dubbio su come eseguire una query su una colonna JSON - Carlos Catucci