PostgreSQL - 在JSONB中的位置

时间:2017-05-09 06:48:08

标签: json postgresql jsonb

我很难查询jsonb数据。我不习惯在postgres中处理jsonb类型。是否可以在jsonb字段上执行 WHERE IN

我有这样的数据

id | act   | act_id |      from_ids       |     object_ids       | post_date
2    post      1      {"2":"1494308197"}    {"items":["104564"]}   1494308197

我尝试执行以下操作,在from_ids列中找到id为关键字的任何ID。

SELECT an.* FROM activity_network an, jsonb_each(an.from_ids) d WHERE d.key->> in ('2');

但显然这不起作用。我试过各种形式。

我发现了一个类似的question,但它并不适用于我需要的东西,因为它获得了价值,我需要key使用IN

不确定如何使用这些jsonb函数。

2 个答案:

答案 0 :(得分:1)

比这简单得多:

SELECT an.*
FROM activity_network an
WHERE an.from_ids ?| ARRAY['2'];

请参阅the documentation

以下索引可以加速这样的查询:

CREATE INDEX ON activity_network USING gin (from_ids);

答案 1 :(得分:0)

您可以使用rv = new RoundKnobButton(this, R.drawable.circle, R.drawable.circle1, R.drawable.circle1, m_Inst.Scale(350), m_Inst.Scale(350)); 功能。

jsonb_exists

the PG documentation中描述的SELECT an.* FROM activity_network an WHERE jsonb_exists(an.from_ids,'2'); 运算符映射到该函数。如果您使用PHP,Java或C + libpq以外的任何其他内容,我建议您使用它,因为世界上的每个人都同意?代表位置参数,但Postgres团队除外。