Postgresql

在 postgreSQL 13 中我應該怎麼做 q jsonb 查詢

  • August 5, 2022

我在 PostgreSQL 13 中儲存了 jsonb 數據,如下所示:

[{"code": "OFFICIAL"}, {"code": "FULLTEXT"}]

如何查詢jsonb數據類型?我試過這樣:

select count(*) from test where tags::jsonb ? 'code';
select count(*) from test where tags::jsonb ->> 'code' = 'OFFICIAL';
select count(*) from test where tags::jsonb @> '{"code": "OFFICIAL"}';

兩者都無法工作。這是表 DDL:

CREATE TABLE public.test (
   id int8 NOT NULL GENERATED ALWAYS AS IDENTITY,
   tags jsonb NULL,
   CONSTRAINT test_pkey PRIMARY KEY (id)
);

我應該怎麼做才能讓它工作?也試過這樣:

select * from (
   select jsonb_array_elements(tags) as tt from test
) a
where  tt -> 'code' = 'OFFICIAL'

它是一個對像數組,因此您需要為@>運算符提供一個數組:

select count(*) 
from test 
where tags @> '[{"code": "OFFICIAL"}]'

或者您可以使用 JSON 路徑表達式:

select count(*) 
from test 
where tags @@ '$[*].code == "OFFICIAL"'

引用自:https://dba.stackexchange.com/questions/315267