当前位置: 首页 > 知识库问答 >
问题:

为存储在JSONb列中的Json属性创建索引,该列包含Postgres中的Json数组

南门新荣
2023-03-14
CREATE TABLE location (id location_Id, details jsonb);

INSERT INTO location (id,details)
VALUES (1,'[{"Slno" : 1, "value" : "Bangalore"},
             {"Slno" : 2, "value" : "Delhi"}]');

INSERT INTO location (id,details)
VALUES (2,'[{"Slno" : 5, "value" : "Chennai"}]');

有人能帮我找到解决这个问题的办法吗,因为这会很有帮助。

谢谢

共有1个答案

唐焕
2023-03-14

它不是单个JSON属性的索引,而是整个属性的索引,但是您可以使用它执行您想要的搜索:

CREATE INDEX locind ON location USING GIN (details jsonb_path_ops);

如果需要除@>(contains)之外的其他操作的索引,则省略JSONB_PATH_OPS。这会使索引变大,速度变慢。

现在可以使用索引搜索属性:

EXPLAIN (VERBOSE) SELECT id FROM location WHERE details @> '[{"Slno" : 1}]';

                               QUERY PLAN
-------------------------------------------------------------------------
 Bitmap Heap Scan on laurenz.location  (cost=8.00..12.01 rows=1 width=4)
   Output: id
   Recheck Cond: (location.details @> '[{"Slno": 1}]'::jsonb)
   ->  Bitmap Index Scan on locind  (cost=0.00..8.00 rows=1 width=0)
         Index Cond: (location.details @> '[{"Slno": 1}]'::jsonb)
(5 rows)
 类似资料:
  • 问题内容: 我使用 PostgreSQL 9.5 和Rails5。我想查询下面显示的包含JSON对象数组的列,以返回包含并执行计数的所有JSON数组元素。我使用 的 SQL 显示在json数据下方。运行查询只会返回一个空数组。 这是我的数据: 我想要其中一个sql查询返回: 和另一个查询以返回数组,以便我可以在应用程序中对其调用count,还可以遍历它以创建表单: 我试过这个SQL查询: 我也试过

  • 我使用PostgreSQL 9.5和Rails 5。我想查询下面显示的包含JSON对象数组的jsonb列,以返回包含的所有JSON数组元素,并执行计数 我使用的SQL显示在json数据下面。运行查询只返回一个空数组。 我尝试了这里和这里建议的查询。 这就是我的jsonb数据的样子: 我希望其中一个sql查询返回: 和另一个返回数组的查询,以便我可以在我的应用程序中调用count并循环使用它来创建表

  • 我有一个表说类型,它有一个JSON列,说位置看起来像这样: 表中的每一行都有数据,并且都有“type”:“state”。我只想从表中的每一行提取“type”:“state”的值,并将其放入一个新列中。我问了几个问题,比如: 查询JSON列中的数组元素 用于在JSON数组中查找元素的索引 查询JSON类型内的数组元素 但无法让它工作。我不需要查询这个。我需要这个专栏的价值。如果我错过了什么,我事先道

  • 我有一个带有JSONB列的表,其数据结构我想像这样索引: 我想在电子邮件上运行索引查询,如: 我如何为此创建Postgres JSONB索引?

  • 我有一个充满json对象的表。只有一列“数据”。 我想将这个表转换成一个包含json对象中所有键的多列的表。 例如, 现在我的桌子是这样的: 但我希望它是这样的: 我不想以这种方式查询它,我想以我上面展示的格式完全创建一个新表。 我可以试试跑步: 但由于我的json对象有数百列,这可能效率低下。有没有更有效的方法?感谢您的帮助或建议。

  • 问题内容: 我正在寻找适当地描述JSON中的列元数据的方法,稍后由Newtonsoft对其进行解析以构建C#。这样,我希望解决一个没有行或没有列的a的问题,但是即使我传递一个空表,我也需要使用标签和希望的数据类型来创建列。 标准输入的示例: 输入表为空的示例: 当我使用解析此内容时,没有行,而且显然没有列。我正在寻找一种描述JSON正文中的列元数据的方法。 问题答案: 该附带Json.Net不输出