Utilizzo di Postgres 9.4, Voglio creare un indice su una colonna JSON che verrà utilizzata durante la ricerca su chiavi specifiche all'interno della colonna.Indice PostgreSQL su JSON
Ad esempio, ho una tabella "farm" con una colonna JSON "animals".
La colonna animali ha oggetti JSON del formato generale:
'{"cow": 2, "chicken": 11, "horse": 3}'
Ho provato una serie di indici (a parte):
(1) create INDEX animal_index ON farm ((animal ->> 'cow'));
(2) create INDEX animal_index ON farm using gin ((animal ->> 'cow'));
(3) create INDEX animal_index ON farm using gist ((animal ->> 'cow'));
voglio eseguire le query come:
SELECT * FROM farm WHERE (animal ->> 'cow') > 3;
e avere questa query utilizzare l'indice.
Quando faccio funzionare questa domanda:
SELECT * FROM farm WHERE (animal ->> 'cow') is null;
poi la (1) Indice funziona, ma non riesco a ottenere qualsiasi degli indici a lavorare per la disuguaglianza.
Un tale indice è possibile?
La tabella della fattoria contiene solo ~ 5000 fattorie, ma alcune contengono 100 di animali e le query richiedono troppo tempo per il mio caso d'uso. Un indice come questo è l'unico metodo che posso immaginare per accelerare questa query, ma forse c'è un'altra opzione.
Grazie! Meravigliosa risposta Mi interessa solo il primo livello. Il valore è sempre un numero intero. Comunque sono interessato ad alcuni altri animali. Ha senso replicare semplicemente questo indice per ogni animale a cui sono interessato? – lnhubbell
@lnhubbell: Per un * numero di animali noto, statico, banale, questa dovrebbe essere la soluzione più semplice ed efficiente. Vorrei esplicitamente renderli indici parziali, però. Vedi l'addendum sopra. –