Diciamo che è necessario verificare se una colonna jsonb contiene un valore specifico corrispondente da una sottostringa in uno qualsiasi dei valori (non annidato, solo primo livello).Effettivamente la ricerca attraverso l'intero JSONB nidificato a 1 livello in Postgres
Come si ottimizza efficacemente una query per cercare l'intera colonna JSONB
(ovvero ogni chiave) per un valore?
C'è qualche buona alternativa a fare ILIKE %val%
su jsonb datatype casted to text?
jsonb_each_text(jsonb_column) ILIKE '%val%'
A titolo di esempio si consideri questi dati:
SELECT '{"col1": "somevalue", "col2": 5.5, "col3": 2016-01-01, "col4": "othervalue", "col5": "yet_another_value"}'::JSONB
Come si va su come ottimizzare una query come che quando hanno bisogno per cercare modello %val%
nel record contenenti configurazione chiavi diverse per diverse righe in un colonna jsonb?
Sono consapevole del fatto che la ricerca con il segno %
precedente e successivo è inefficiente, in modo da cercare un modo migliore, ma avendo difficoltà a trovarne uno. Inoltre, l'indicizzazione di tutti i campi in modo esplicito non è un'opzione in quanto variano per ogni tipo di record e creerebbe un enorme insieme di indici.
Esiste un'alternativa migliore per l'estrazione di ciascuna coppia di valori-chiave in testo e l'esecuzione di una ricerca ILIKE/POSIX?
Questa potrebbe essere una soluzione migliore per dba.stackexchange.com, volevo solo ottenere vasto pubblico per questa materia. –
['pg_trgm'] (http://www.postgresql.org/docs/current/static/pgtrgm.html) potrebbe essere l'opzione migliore (tipo ilike/posix) per questo dato che si sta ancora utilizzando il tipo di criteri di corrispondenza del modello nella colonna jsonb –
@DmitrySavinkov potresti per favore elaborare? Credo che avrei ancora bisogno di decomprimere i dati JSON in righe separate. –