标签: jsonb

何时应该使用HStoreField而不是JSONField?

Django 1.8提供了HStoreField,而Django 1.9将为PostgreSQL提供JSONField(它使用jsonb).

我的理解是hstore比json快,但是不允许嵌套并且只允许字符串.

应该何时使用另一个?一个人应该优先于另一个吗?与jsonb相比,hstore仍然是性能的明显赢家吗?

python django postgresql hstore jsonb

17
推荐指数
1
解决办法
2124
查看次数

JPA支持查询Postgres JSON字段

JPA是否已经支持处理JSON字段上的查询,如下所示:

select * from person where (info ->> 'age')::numeric = 40;

select * from person where info ->> 'firstName'= 'Cabalo';
Run Code Online (Sandbox Code Playgroud)

我正在使用hibernate 5(在spring-data-jpa之后)和Postgres 9.4

postgresql hibernate jpa jsonb

17
推荐指数
1
解决办法
2705
查看次数

在Postgres jsonb中查询数组结构的正确索引是什么?

我正在试验jsonb在Postgres 9.4 中的Postgres 字段中保留以下值:

[{"event_slug":"test_1","start_time":"2014-10-08","end_time":"2014-10-12"},
 {"event_slug":"test_2","start_time":"2013-06-24","end_time":"2013-07-02"},
 {"event_slug":"test_3","start_time":"2014-03-26","end_time":"2014-03-30"}]
Run Code Online (Sandbox Code Playgroud)

我正在执行以下查询:

SELECT * FROM locations
WHERE EXISTS (
  SELECT 1 FROM jsonb_array_elements(events) AS e
  WHERE (
    e->>'event_slug' = 'test_1' AND
    (
      e->>'start_time' >= '2014-10-30 14:04:06 -0400' OR
      e->>'end_time' >= '2014-10-30 14:04:06 -0400'
    )
  )
)
Run Code Online (Sandbox Code Playgroud)

如何利用上述查询为该数据创建索引?这对于几百万行来说听起来是否合理?每行包含〜10个事件?

值得注意的是,我似乎仍在进行顺序扫描:

CREATE INDEX events_gin_idx ON some_table USING GIN (events);
Run Code Online (Sandbox Code Playgroud)

我猜是因为我在查询中做的第一件事就是将数据转换为json数组元素.

sql postgresql indexing set-returning-functions jsonb

16
推荐指数
1
解决办法
7973
查看次数

在postgresql中,如何在jsonb键上返回布尔值而不是字符串?

在下面的查询中,$ isComplete和$ isValid作为字符串返回.但是,它们保存为布尔值.如何获取要返回的这些字段的布尔表示?

query =
    "SELECT
        data #>> '{id}' AS id,
        data #>> '{name}' AS name,
        data #>> '{curator}' AS curator,
        data #>  '{$isValid}' as \"$isValid\",
        data #>  '{customer}' as customer,
        data #>  '{$createdTS}' as \"$createdTS\",
        data #>  '{$updatedTS}' as \"$updatedTS\",
        data #>  '{$isComplete}' as \"$isComplete\",
        (count(keys))::numeric as \"numProducts\"
    FROM
      appointment_intakes,
      LATERAL jsonb_object_keys(data #> '{products}') keys
    GROUP BY id"
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

16
推荐指数
1
解决办法
9846
查看次数

Postgresql查询嵌套JSONB字段中的对象

我正在使用PostgreSQL 9.6,我有一个名为"ItemDbModel"的表,其中有两列如下:

No integer,
Content jsonb
Run Code Online (Sandbox Code Playgroud)

说我把很多记录像:

 "No": 2, {"obj":"x","Item": {"Name": "BigDog", "Model": "NamedHusky", "Spec":"red dog"}}
 "No": 4, {"obj":"x","Item": {"Name": "MidDog", "Model": "NamedPeppy", "Spec":"no hair"}}
 "No": 5, {"obj":"x","Item": {"Name": "BigCat", "Model": "TomCat", "Spec":"blue color"}}
Run Code Online (Sandbox Code Playgroud)

如何查询表格:

  1. 记录"Content.Item.Name"包含"Dog" "Content.Item.Spec"包含"red"的记录.
  2. "Content.Item.Name"包含"Dog" "Content.Item.Spec"的记录包含"red".
  3. 记录"Content.Item" 中的任何 json字段包含"dog"的位置.

并按"Content.Item.Name.length"排序?

谢谢!

postgresql json jsonb postgresql-9.6 postgresql-12

16
推荐指数
1
解决办法
9739
查看次数

ruby on rails jsonb列的默认值

我有一个模型ProjectKeyword,我在列中使用jsonb数据类型 :segemnted_data

class ProjectKeyword < ApplicationRecord
  belongs_to :project
  belongs_to :keyword
  has_many :project_keyword_dimensions
  has_many :dimensions, through: :project_keyword_dimensions

  validates :project_id, :keyword_id, presence: true
end
Run Code Online (Sandbox Code Playgroud)

移民

class AddSegemtnedDataToProjectKeywords < ActiveRecord::Migration[5.0]
  def change
    add_column :project_keywords, :segmented_data, :jsonb, default: '{}'
    add_index  :project_keywords, :segmented_data, using: :gin
  end
end
Run Code Online (Sandbox Code Playgroud)

我的问题是当我创建新project_keyword实例时,默认值segmented_data是字符串而不是哈希,我无法更新此字段或与其他哈希合并例如

[12] pry(#)> new_pr_keyword = ProjectKeyword.new(project_id: 1671333, keyword_id: 39155)
=> #<ProjectKeyword:0x007fd997641090 id: nil, project_id: 1671333, keyword_id: 39155, segmented_data: "{}">
[13] pry(#)> new_pr_keyword.save!
=> true
[14] pry(#)> new_pr_keyword.segmented_data.update({'new_data' => 'some_data'})
NoMethodError: undefined method `update' for …
Run Code Online (Sandbox Code Playgroud)

postgresql activerecord ruby-on-rails jsonb

15
推荐指数
1
解决办法
5533
查看次数

Postgres jsonb'不包含'运算符

我正在尝试postgres jsonb列类型,到目前为止一直很好.我正在使用的一个常见查询是这样的:

select count(*) from jsonbtest WHERE attributes @> '{"City":"Mesa"}';
Run Code Online (Sandbox Code Playgroud)

我该怎么扭转呢?是否有不同的运营商或仅仅用作

select count(*) from jsonbtest WHERE NOT attributes @> '{"City":"Mesa"}';
Run Code Online (Sandbox Code Playgroud)

postgresql jsonb postgresql-9.4

14
推荐指数
2
解决办法
5675
查看次数

在 postgresql 中,如何选择 jsonb 数组包含对象的行?

我的数据库表是这样的(数据是 JSONB 列):

 id |                 data                 
----+--------------------------------------
  1 | {"tags": [{"name": "tag1"}, {"name": "tag2"}]}
  2 | {"tags": [{"name": "tag2"}]}
  3 | {"tags": [{"name": "tag3"}]}
  4 | {"tags": [{"name": "tag4"}]}
Run Code Online (Sandbox Code Playgroud)

我想编写一个查询,该查询将返回data包含标签tag2或 的行tag3。因此应返回第 1、2 和 3 行。我一直在查看 postgresql JSONB 文档,但我不清楚如何查询这样的嵌套结构。我该如何编写 where 子句?

postgresql jsonb

14
推荐指数
2
解决办法
2万
查看次数

SQL:postgreSQL 中 json_pretty() 的等价物是什么

这个 MySQL 函数相当于什么

SELECT JSON_PRETTY('{"a": 1, "b": 2, "c": 3}') AS Result
  FROM table;
Run Code Online (Sandbox Code Playgroud)

格式化 JSON:

+------------------------------+
| Result                       |
+------------------------------+
| {                            |
|   "a": 1,                    |
|   "b": 2,                    |
|   "c": 3                     |
| }                            |
+------------------------------+
Run Code Online (Sandbox Code Playgroud)

我已经jsonb_pretty()按照文档中提到的方式尝试过,但没有任何可用的

sql postgresql json dataformat jsonb

14
推荐指数
1
解决办法
9034
查看次数

如何在JSON Postgres数据类型列中搜索特定字符串?

我有一个params名为reports包含JSON 的表中的列.

我需要在JSON数组中的任何位置找到哪些行包含文本'authVar'.我不知道文本出现的路径或级别.

我想用标准的操作符搜索JSON.

就像是:

SELECT * FROM reports
WHERE params LIKE '%authVar%'
Run Code Online (Sandbox Code Playgroud)

我搜索并搜索了Postgres文档.我不太了解JSON数据类型,并且我错过了一些简单的东西.

JSON看起来像这样.

[  
   {  
      "tileId":18811,
      "Params":{  
         "data":[  
            {  
               "name":"Week Ending",
               "color":"#27B5E1",
               "report":"report1",
               "locations":{  
                  "c1":0,
                  "c2":0,
                  "r1":"authVar",
                  "r2":66
               }
            }
         ]
      }
   }
]
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

13
推荐指数
1
解决办法
6538
查看次数