PostgreSQL-JSONB中的何处
我很难查询jsonb数据。我不习惯在postgres中处理jsonb类型。是否可以在jsonb字段上执行中的位置 我有这样的数据PostgreSQL-JSONB中的何处,json,postgresql,jsonb,Json,Postgresql,Jsonb,我很难查询jsonb数据。我不习惯在postgres中处理jsonb类型。是否可以在jsonb字段上执行中的位置 我有这样的数据 id | act | act_id | from_ids | object_ids | post_date 2 post 1 {"2":"1494308197"} {"items":["104564"]} 1494308197 我正在尝试下面这样做,以在from_ids列中查找任何id
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');
但很明显,这是行不通的。我尝试了各种形式
我发现了一个类似的方法,但它不能满足我的需要,因为它获取了值,我需要使用中的获取键
不知道如何使用这些jsonb函数 比这简单得多:
SELECT an.*
FROM activity_network an
WHERE an.from_ids ?| ARRAY['2'];
看
以下索引可以加快此类查询的速度:
CREATE INDEX ON activity_network USING gin (from_ids);
这要简单得多:
SELECT an.*
FROM activity_network an
WHERE an.from_ids ?| ARRAY['2'];
看
以下索引可以加快此类查询的速度:
CREATE INDEX ON activity_network USING gin (from_ids);
您可以使用jsonb\u exists
函数进行此操作
SELECT an.* FROM activity_network an WHERE jsonb_exists(an.from_ids,'2');
中描述的?
运算符映射到该函数。如果您使用的是PHP、Java或C+libpq以外的任何东西,我建议您改用它,因为世界上每个人都同意?
代表位置参数,Postgres团队除外。您可以使用jsonb\u exists
函数来实现这一点
SELECT an.* FROM activity_network an WHERE jsonb_exists(an.from_ids,'2');
中描述的?
运算符映射到该函数。如果您使用的是PHP、Java或C+libpq以外的任何东西,我建议您改用它,因为世界上每个人都同意,?
代表位置参数,Postgres团队除外。我们看看这个。这很简单。几个小时来一直在敲我的头。谢谢你的快速回复!如果数组中有多个项,则似乎不使用gin索引。你知道这是否可以被编入索引吗?我已经扩展了答案以包含这些信息。如果您没有看到使用的索引,可能PostgreSQL认为顺序扫描更便宜。您可以设置enable_seqscan=off
来测试是否可以使用索引。我们看看这个。这很简单。几个小时来一直在敲我的头。谢谢你的快速回复!如果数组中有多个项,则似乎不使用gin索引。你知道这是否可以被编入索引吗?我已经扩展了答案以包含这些信息。如果您没有看到使用的索引,可能PostgreSQL认为顺序扫描更便宜。您可以设置enable_seqscan=off
来测试是否可以使用索引。因此,我实际上在文档中没有看到该函数。您在哪里找到它的?您可以通过在psql控制台中运行\doS+
来找到它。只有当您使用+,它才会列出相应的函数。它只剩下几页了。但是如何表示它产品_alias.extras->“SIZE”?|带有jsonb的数组['91',38']
@劳伦兹Albe@shuba.ivan在您的例子中,->
操作符对应于jsonb_数组_元素(数组,索引)
或jsonb_对象_字段(对象,字段)
。但是如何查找查询产品的别名.extras->“大小”?|数组['91',38']
?所以我在文档中实际上没有看到这个函数。您在哪里找到它的?您可以通过在psql控制台中运行\doS+
来找到它。只有当您使用+,它才会列出相应的函数。它只剩下几页了。但是如何表示它产品_alias.extras->“SIZE”?|带有jsonb的数组['91',38']
@劳伦兹Albe@shuba.ivan在您的例子中,->
运算符对应于jsonb_数组_元素(数组,索引)
或jsonb_对象_字段(对象,字段)
。但是如何查找查询产品的别名.extras->“大小”?|数组['91',38']
?