2017-05-24 3 views
0

Comment obtenir une certaine valeur basée sur une clé dans un objet faisant partie de mon tableau? Je stocke mes données JSON comme jsonb dans mes Postgres 9.6 DBPostgreSQL: obtention de la valeur de l'objet dans le tableau jsonb pour la recherche de texte intégral

addresses (JSONB) 
--------- 
[{"address":"[email protected]", "type": "home"}, {"address":"[email protected]", "type": "work"}] 

Ce que j'aimerais faire est quelque chose comme:

SELECT addresses ->> 'address' FROM foo 

puis utiliser le résultat dans une recherche en texte intégral, où je rechercher un adresse email spécifique comme:

SELECT * FROM foo WHERE 
to_tsvector('simple', CAST(addresses ->>'address' as text)) @@ to_tsquery('abc:*'); 

Tout ce que je reçois quand je lance la première requête est: (NULL)

Répondre

1

Vous devriez unnest le tableau JSON en utilisant jsonb_array_elements():

with foo(addresses) as (
values 
    ('[{"address":"[email protected]", "type": "home"}, {"address":"[email protected]", "type": "work"}]'::jsonb) 
) 

select value->>'address' as address 
from foo, 
jsonb_array_elements(addresses) 
where to_tsvector('simple', value->>'address') @@ to_tsquery('abc:*'); 

    address 
------------- 
[email protected] 
(1 row) 
+0

Merci, votre réponse a fonctionné pour moi. –