PostgreSQL:获取 jsonb 数组中对象的值以进行全文搜索

PostgreSQL: get value of object inside jsonb array for full text search

如何根据数组中对象内的键获取特定值?我将 json 数据作为 jsonb 存储在我的 Postgres 9.6 DB

addresses (JSONB)
---------
[{"address":"abc@def.com", "type": "home"}, {"address":"xyz@def.com", "type": "work"}]

我喜欢做的是:

SELECT addresses ->> 'address' FROM foo

然后在全文搜索中使用结果,我在其中搜索特定的电子邮件地址,例如:

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

当我 运行 第一个查询时我得到的是:(NULL)

您应该使用 jsonb_array_elements():

取消嵌套 json 数组
with foo(addresses) as (
values
    ('[{"address":"abc@def.com", "type": "home"}, {"address":"xyz@def.com", "type": "work"}]'::jsonb)
)

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

   address   
-------------
 abc@def.com
(1 row)