Django 1.8提供了HStoreField,而Django 1.9将为PostgreSQL提供JSONField(它使用jsonb).
我的理解是hstore比json快,但是不允许嵌套并且只允许字符串.
应该何时使用另一个?一个人应该优先于另一个吗?与jsonb相比,hstore仍然是性能的明显赢家吗?
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
我正在试验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数组元素.
在下面的查询中,$ 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 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)
如何查询表格:
并按"Content.Item.Name.length"排序?
谢谢!
我有一个模型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) 我正在尝试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) 我的数据库表是这样的(数据是 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 子句?
这个 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()按照文档中提到的方式尝试过,但没有任何可用的
我有一个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)
jsonb ×10
postgresql ×10
json ×4
sql ×2
activerecord ×1
dataformat ×1
django ×1
hibernate ×1
hstore ×1
indexing ×1
jpa ×1
python ×1