我在 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'
它是一个对象数组,因此您需要为
@>
运算符提供一个数组:或者您可以使用 JSON 路径表达式: