我有以下jsonb结构:
{'this': '1', 'this_that': '0', 'this_and_that': '5'}
Run Code Online (Sandbox Code Playgroud)
如何选择包含LIKE运算符的行?
SELECT * FROM myjson WHERE j ? 'this_%'
Run Code Online (Sandbox Code Playgroud)
返回0行...希望它匹配'this_that'和'this_and_that'.(注意:'_'后面的字符可能会有很大差异,因此我无法完全匹配).
我有一个Postgres表,其内容与此类似:
id | data
1 | {"a":"4", "b":"5"}
2 | {"a":"6", "b":"7"}
3 | {"a":"8", "b":"9"}
Run Code Online (Sandbox Code Playgroud)
第一列是整数,第二列是json列.
我希望能够扩展json中的键和值,所以结果如下所示:
id | key | value
1 | a | 4
1 | b | 5
2 | a | 6
2 | b | 7
3 | a | 8
3 | b | 9
Run Code Online (Sandbox Code Playgroud)
这可以在Postgres SQL中实现吗?
我试过的
鉴于原始表可以这样模拟:
select *
from
(
values
(1, '{"a":"4", "b":"5"}'::json),
(2, '{"a":"6", "b":"7"}'::json),
(3, '{"a":"8", "b":"9"}'::json)
) as q (id, data)
Run Code Online (Sandbox Code Playgroud)
我可以使用以下方法获取密钥:
select id, json_object_keys(data::json) …Run Code Online (Sandbox Code Playgroud) 是否可以在不创建函数且不使用任何服务器端编程语言的情况下转换postgresql 9.4 jsonb数据?
CREATE TABLE test (id SERIAL PRIMARY KEY,data JSONB);
INSERT INTO test(data) VALUES('{"a":1,"b":2}');
INSERT INTO test(data) VALUES('{"a":3,"b":4,"c":7}');
INSERT INTO test(data) VALUES('{"a":5,"b":5,"d":8}');
SELECT * FROM test;
id | data
----+-------------------------
1 | {"a": 1, "b": 2}
2 | {"a": 3, "b": 4, "c": 7}
3 | {"a": 5, "b": 5, "d": 8}
Run Code Online (Sandbox Code Playgroud)
把它变成:
{1:[1,2,null,null],2:[3,4,7,null],3:[5,5,null,8]}
Run Code Online (Sandbox Code Playgroud) 在我阅读的关于在迁移中添加Postgres数据类型的稀缺指令jsonb中,它看起来像这样:
create_table :ref_check_ins do |t|
t.jsonb :document, null: false, default: '{}'
t.index :document, using: :gin
end
Run Code Online (Sandbox Code Playgroud)
但有没有理由反对默认为字符串的Hash intead,即{}而不是'{}'?
将其定义为String类型时,该列的类:
String < Object
Run Code Online (Sandbox Code Playgroud)
将其定义为Hash类型时,该列的类:
Hash
Run Code Online (Sandbox Code Playgroud) 目前我正在使用postgreSQL 9.5并尝试更新jsonb字段数组中的值.但我无法获得所选值的索引
我的表看起来像:
CREATE TABLE samples (
id serial,
sample jsonb
);
Run Code Online (Sandbox Code Playgroud)
我的JSON看起来像:
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"},
{"8410": "ABNZIT", "8411": "Abnahmezeit"},
{"8410": "FERR_R", "8411": "Ferritin"}
]}
Run Code Online (Sandbox Code Playgroud)
我的SELECT语句可以获得正确的值:
SELECT
id, value
FROM
samples s, jsonb_array_elements(s.sample#>'{result}') r
WHERE
s.id = 26 and r->>'8410' = 'FERR_R';
Run Code Online (Sandbox Code Playgroud)
结果是:
id | value
----------------------------------------------
26 | {"8410": "FERR_R", "8411": "Ferritin"}
Run Code Online (Sandbox Code Playgroud)
好的,这就是我想要的.现在我想使用以下UPDATE语句执行更新以添加新元素"ratingtext"(如果尚未存在):
UPDATE
samples s
SET
sample = jsonb_set(sample,
'{result,2,ratingtext}',
'"Some individual text"'::jsonb,
true)
WHERE
s.id = 26;
Run Code Online (Sandbox Code Playgroud)
执行UPDATE语句后,我的数据看起来像这样(也正确):
{"result": [
{"8410": "ABNDAT", "8411": "Abnahmedatum"}, …Run Code Online (Sandbox Code Playgroud) 我正在使用Postgresql 9.4并有一个表test,用id::int和content::jsonb,如下:
id | content
----+-----------------
1 | {"a": {"b": 1}}
2 | {"a": {"b": 1}}
3 | {"a": {"b": 2}}
4 | {"a": {"c": 1}}
Run Code Online (Sandbox Code Playgroud)
如何GROUP BY在content列中的内部字段上将每个组作为数组返回?具体来说,我要找的结果是:
content
---------------------------------
[{"a": {"b": 1}},{"a": {"b": 1}}]
[{"a": {"b": 2}}]
(2 rows)
Run Code Online (Sandbox Code Playgroud)
试:
SELECT json_agg(content) as content FROM test GROUP BY content ->> '{a,b}';
Run Code Online (Sandbox Code Playgroud)
产量:
content
----------------------------------------------------------------------
[{"a": {"b": 1}}, {"a": {"b": 1}}, {"a": {"b": 2}}, {"a": {"c": 1}}]
(1 row)
Run Code Online (Sandbox Code Playgroud) 我将非常复杂的JSONB存储在一jsonb列中.
DB表看起来像:
CREATE TABLE sites (
id text NOT NULL,
doc jsonb,
PRIMARY KEY (id)
)
Run Code Online (Sandbox Code Playgroud)
我们存储在doc列中的JSONB数据是一个复杂的嵌套数据:
{
"_id": "123",
"type": "Site",
"identification": "Custom ID",
"title": "SITE 1",
"address": "UK, London, Mr Tom's street, 2",
"buildings": [
{
"uuid": "12312",
"identification": "Custom ID",
"name": "BUILDING 1",
"deposits": [
{
"uuid": "12312",
"identification": "Custom ID",
"audits": [
{
"uuid": "12312",
"sample_id": "SAMPLE ID"
}
]
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
所以我的结构JSONB看起来像:
SITE
-> …Run Code Online (Sandbox Code Playgroud) postgresql full-text-search jsonb postgresql-9.5 postgresql-9.6
我有这个更新,我已经阅读了 postgresql 文档,但不清楚如何插入数据,一些教程选项:
1.with '{}'
2.with {}
3.with '[]' <-- array of objects
Run Code Online (Sandbox Code Playgroud)
并且大多数不'使用':: jsonb'就像在:
https://www.postgresql.org/docs/9.4/static/datatype-json.html
这是我的代码:
UPDATE customer set phones ='{ {"type": "mobile", "phone": "001001"} ,
{"type": "fix", "phone": "002002"} }'::jsonb
where id ='4ca27243-6a55-4855-b0e6-d6e1d957f289';
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
ERROR: invalid input syntax for type json
LINE 1: UPDATE customer set phones ='{ {"type": "mobile", "phone": ...
^
DETAIL: Expected string or "}", but found "{".
CONTEXT: JSON data, line 1: { {...
SQL state: 22P02
Character: 29
Run Code Online (Sandbox Code Playgroud)
我只需要录制一盏电话,需要附上一个大名鼎鼎的对象吗?我的意思是对于 javascript ,对象数组不是对象,但我不知道 postresql 的 …
我有一个包含 JSON 类型字段的表,其中包含数据数组:
Column | Type
-------------------+---------
id | integer
user_id | uuid
changes | jsonb
exercise_entry_id | integer
Run Code Online (Sandbox Code Playgroud)
该changes字段包含一个 JSON 对象列表。
对于数据清理任务,我需要将changes字段的内容连接为一个聚合体,返回另一个非嵌套 JSON 数组。
假设数据库包含以下行:
id | user_id | changes | exercise_entry_id
---+---------+-----------------+---------------------
1 | foo | ['a', 'b'] | 3
2 | foo | ['c', 'd'] | 3
Run Code Online (Sandbox Code Playgroud)
我需要一个结果,按 user_id 和 Exercise_entry_id 分组,其中更改按如下方式连接。
user_id | changes | exercise_entry_id
--------+-----------------------------+---------------------------
foo | ['a', 'b', 'c', 'd'] | 3
Run Code Online (Sandbox Code Playgroud) 我有一个名为 的 jsonb 字段passengers,其结构如下:
请注意,persons 是一个数组
{
"adults": {
"count": 2,
"persons": [
{
"age": 45,
"name": "Prof. Kyleigh Walsh II",
"birth_date": "01-01-1975"
},
{
"age": 42,
"name": "Milford Wiza",
"birth_date": "02-02-1978"
}
]
}
}
Run Code Online (Sandbox Code Playgroud)
如何针对此 JSONB 的名称字段执行查询?例如,要选择与名称字段匹配的所有行Prof?
这是我的初步尝试:
SELECT passengers from opportunities
WHERE 'passengers->adults' != NULL
AND 'passengers->adults->persons->name' LIKE '%Prof';
Run Code Online (Sandbox Code Playgroud)
这会返回 0 行,但正如您所看到的,我有一行的名称为Prof. Kyleigh Walsh II