Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PostgreSQL-JSONB中的何处_Json_Postgresql_Jsonb - Fatal编程技术网

PostgreSQL-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

我很难查询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是键

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']