标签: jsonb

如何为jsonb密钥执行LIKE查询?

我有以下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'.(注意:'_'后面的字符可能会有很大差异,因此我无法完全匹配).

postgresql json jsonb

11
推荐指数
1
解决办法
5612
查看次数

从Postgres中的json对象中提取键值

我有一个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 json jsonb

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

如何将postgresql 9.4 jsonb转换为没有函数/服务器端语言的对象

是否可以在不创建函数且不使用任何服务器端编程语言的情况下转换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)

postgresql jsonb

10
推荐指数
1
解决办法
3900
查看次数

我应该在迁移中将jsonb默认为"{}"还是{}

在我阅读的关于在迁移中添加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 ruby-on-rails jsonb ruby-on-rails-5

10
推荐指数
1
解决办法
2423
查看次数

postgresql 9.5使用jsonb_set更新特定的jsonb数组值

目前我正在使用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)

arrays postgresql json sql-update jsonb

10
推荐指数
1
解决办法
4988
查看次数

Postgres GROUP BY在jsonb内场

我正在使用Postgresql 9.4并有一个表test,用id::intcontent::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 BYcontent列中的内部字段上将每个组作为数组返回?具体来说,我要找的结果是:

             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)

sql postgresql json jsonb postgresql-9.4

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

如何在Postgresql中对复杂的嵌套JSONB实现全文搜索

我将非常复杂的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

10
推荐指数
1
解决办法
1648
查看次数

在 postgresql、选项数组或对象中插入 jsonb 数据,有效方式

我有这个更新,我已经阅读了 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 的 …

sql postgresql json jsonb

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

在 PostgreSQL 聚合中连接 JSON 数组

我有一个包含 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)

sql postgresql json aggregate jsonb

10
推荐指数
1
解决办法
4038
查看次数

Postgres - 如何对 JSONB 字段执行 LIKE 查询?

我有一个名为 的 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

postgresql jsonb postgresql-9.6

10
推荐指数
1
解决办法
9519
查看次数