标签: jsonb

PostgreSQL上的CTE和临时索引

我在postgres数据库上工作,我将使用混合的关系表和jsonb表(可以索引).

我正在使用大量的CTE查询来插入或更新从临时表中选择的数据,例如:

WITH information as (
    select fieldA, fieldB, fieldC from tableA
)
insert (fieldA, fieldB, fieldC)
SELECT inf.fieldA, inf.fieldB, inf.fieldC
from information inf
Run Code Online (Sandbox Code Playgroud)

好吧,我想知道是否有可能在这种表中创建临时索引,如果是,是否可以在jsonb类型fieds中创建索引?(考虑这个临时表)

postgresql temp-tables jsonb postgresql-9.4

8
推荐指数
2
解决办法
6073
查看次数

在PostgreSQL 9.2,9.3和9.4中追加(推送)和删除JSON数组?

对于大于9.5的版本,请参阅此问题

我使用这个在PostgreSQL中创建了一个表:

CREATE TEMP TABLE jsontesting
AS
  SELECT id, jsondata::jsonb FROM ( VALUES
    (1, '["abra","value","mango", "apple", "sample"]'),
    (2, '["japan","china","india", "russia", "australia"]'),
    (3, '["must", "match"]'),
    (4, '["abra","value","true", "apple", "sample"]'),
    (5, '["abra","false","mango", "apple", "sample"]'),
    (6, '["string","value","mango", "apple", "sample"]'),
    (7, '["must", "watch"]')
  ) AS t(id,jsondata);
Run Code Online (Sandbox Code Playgroud)

现在我想要的是

  • 添加append_to_json_array这样的东西,实际的jsondata是一个json数组,而newString是我必须添加到jsondata数组的,这个函数应该返回更新的json数组.

    UPDATE jsontesting
    SET jsondata=append_to_json_array(jsondata, 'newString')
    WHERE id = 7;
    
    Run Code Online (Sandbox Code Playgroud)
  • 从json数据数组中删除一个值,一个用于删除值的函数.

我试图搜索postgreSQL的文档,但没有发现任何内容.

arrays postgresql json jsonb postgresql-9.4

8
推荐指数
2
解决办法
5409
查看次数

Postgres 9.4中JSON - > JSONB列转换的速度大致有多快

我正在寻求从Postgres 9.3迁移到9.4,并在JSON列中拥有大量数据.虽然很好,但我想看看迁移到更有效的列存储(JSONB似乎是一个非常令人兴奋的技术!).

要实际迁移,我想了解类似的迁移特征

ALTER TABLE table_with_json
    ALTER COLUMN my_json
    SET DATA TYPE jsonb
    USING my_json::jsonb;
Run Code Online (Sandbox Code Playgroud)

(从这个有用的问题).

理想情况下,了解迁移1mil和10mil条目需要多长时间以及它如何扩展将是一件好事.

虽然我可以自己获得这些数字,但我认为这个问题可能对其他人有帮助.如果我最终自己尝试这个,我肯定会为其他人提供答案,但不确定何时会发生.

postgresql json database-migration jsonb postgresql-9.4

8
推荐指数
1
解决办法
839
查看次数

如何将to_jsonb用作row_to_jsonb?关于"多少"的详细信息?

我在pg9.4中以"JSON模式"测试了一些查询,现在我正在检查pg9.5是否会带来所有相同的JSONB功能......但是没有row_to_jsonb()函数(!).(为什么它不是 基本参数中的正交指令集?)

该指南 仅说"to_jsonb功能提供了相同的功能".我们在哪里可以检查"多少"?关于这个细节 还有其他特定的JSONB指南吗?

postgresql json jsonb postgresql-9.5

8
推荐指数
2
解决办法
3307
查看次数

如何在PostgreSQL中选择不区分大小写的JSONB密钥(9.4+)

设置(PostgreSQL 9.4+)

假设我有一张桌子product:

create table product
(
    attributes jsonb
);
Run Code Online (Sandbox Code Playgroud)

有数据:

insert into product (attributes) 
values ('{"Color": "Red"}'), 
       ('{"color": "White"}'),
       ('{"COLOR": "Blue"}');
Run Code Online (Sandbox Code Playgroud)

如何color在PostgreSQL 9.4+中选择所有记录的属性?由于键的外壳不同,我无法使用此语法:

select 
    attributes->>'color' as color
from product;
Run Code Online (Sandbox Code Playgroud)

我的预期输出是:

Red
White
Blue
Run Code Online (Sandbox Code Playgroud)

可能解决方案

我也试过使用这种语法(工作但感觉很难):

select 
    coalesce(
        attributes->>'color', 
        attributes->>'Color', 
        attributes->>'COLOR') as color 
from product;
Run Code Online (Sandbox Code Playgroud)

这可能吗?我可以看到,如果你拥有colorColor锁定同一个对象可能会发生冲突,所以如果这不是一件事我也不会感到惊讶.

参考文献:

postgresql json jsonb postgresql-9.4

8
推荐指数
1
解决办法
1643
查看次数

按值删除jsonb数组元素

我确实弄清楚如何从一个数组中删除单个记录的值,但是如何为其中许多记录删除它.问题在于我如何使用子查询.因为它必须只返回单个元素.也许我的方法是错的.


    Given input: '{attributes:['is_new', 'is_old']}'
    Expected result '{attributes: ['is_old']}' #remove 'is_new' from jsonb array


    Real example:
    #   sku  |           properties 
    # -------+--------------------------------
    #  nu3_1 | {                             +
    #        |     "name": "silly_hodgkin",  +
    #        |     "type": "food",           +
    #        |     "attributes": [           +
    #        |         "is_gluten_free",     +
    #        |         "is_lactose_free",    +
    #        |         "is_new"              +
    #        |     ]                         +
    #        | }  


#Query that removes single array element:

SELECT c.sku, jsonb_agg(el) FROM
catalog c JOIN (select sku, jsonb_array_elements_text(properties->'attributes') as el …

arrays postgresql json jsonb

8
推荐指数
1
解决办法
6086
查看次数

Spring Data Rest - PATCH Postgres jsonb字段

简短版本是:如何jsonb使用Spring Data Rest PATCH方法修补Postgres 字段中包含的JSON对象?

这是长版本,请考虑以下实体:

@Entity
@Table(name = "examples")
public class Example {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    private String jsonobject;

    @JsonRawValue
    public String getJsonobject() {
        return jsonobject == null ? null : jsonobject;
    }

    public void setJsonobject(JsonNode jsonobject) {
        this.jsonobject = jsonobject == null ? null : jsonobject.toString();
    }
}
Run Code Online (Sandbox Code Playgroud)

jsonobject是Postgres类型jsonb.这些getter/setter是为这里提到的Spring Data Rest序列化/反序列化它的方法.我们还尝试给该字段提供自己的类型,如这些答案中所述.

我们的目标是使用Spring Data Rest修补此字段包含的JSON对象.

例如:

GET /examples/1
{
    "id": 1,
    "jsonobject": {
         "foo": {"bar": …
Run Code Online (Sandbox Code Playgroud)

postgresql spring spring-data-rest json-patch jsonb

8
推荐指数
1
解决办法
1644
查看次数

合并PostgreSQL中的JSONB值?

使用||运算符会产生以下结果:

select '{"a":{"b":2}}'::jsonb || '{"a":{"c":3}}'::jsonb ;
    ?column?     
-----------------
 {"a": {"c": 3}}
(1 row)
Run Code Online (Sandbox Code Playgroud)

我希望能够实现以下结果(??只是运营商的占位符):

select '{"a":{"b":2}}'::jsonb ?? '{"a":{"c":3}}'::jsonb ;
    ?column?     
-----------------
 {"a": {"b": 2, "c": 3}}
(1 row)
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到顶级a键的子值已"合并",因此结果包含bc.

你如何"深入"合并Postgres中的两个JSONB值?

这有可能,如果是这样的话怎么样?


一个更复杂的测试用例:

select '{"a":{"b":{"c":3},"z":true}}'::jsonb ?? '{"a":{"b":{"d":4},"z":false}}'::jsonb ;
    ?column?     
-----------------
 {"a": {"b": {"c": 3, "d": 4}, "z": false}}
(1 row)
Run Code Online (Sandbox Code Playgroud)

另一个测试用例,其中一个原语"合并"和对象:

select '{"a":{"b":{"c":3},"z":true}}'::jsonb ?? '{"a":{"b":false,"z":false}}'::jsonb ;
        ?column?         
-----------------
 {"a": {"b": false, "z": false}}
(1 row)
Run Code Online (Sandbox Code Playgroud)

postgresql json jsonb

8
推荐指数
2
解决办法
2431
查看次数

如何在具有空值的列上使用`jsonb_set`

我正在使用Postgres 9.6,我有一个JSONB列,其中有些行有NULL值,有些行有dict值,如{"notify": false}.

我想用更多的字典键/值对更新列值.

UPDATE accounts SET notifications =  jsonb_set(notifications, '{"alerts"}', 'false');
Run Code Online (Sandbox Code Playgroud)

适用于我已经拥有类似值的情况{"notify": false}.最终结果如预期的那样{"alerts": false, "notifications": false}.

但是我试图更新我们的价值NULL,数据库中没有任何更新.

你能告诉我如何更新这些NULL值,所以它们的最终结果将是像这样的值{"notify": false}.最终结果如预期的那样{"alerts": false}

postgresql json jsonb postgresql-9.6

8
推荐指数
1
解决办法
2327
查看次数

检测jsonb属性是数组还是对象

许多jsonb / json函数期望列的所有值要么是json数组类型(如jsonb_array_length),要么仅是json对象类型(如jsonb_build_oject)。

数据库中有一些jsonb列,其中包含数组和对象根的混合,是否有任何简单的方法可以过滤掉数组和对象,以便查询

SELECT DISTINCT jsonb_object_keys(my_column) FROM my_table;
 cannot call jsonb_object_keys on an array
Run Code Online (Sandbox Code Playgroud)

要么

SELECT my_column FROM my_table WHERE jsonb_array_length(column) > 0;
cannot get array length of a non-array
Run Code Online (Sandbox Code Playgroud)

sql postgresql jsonb

8
推荐指数
1
解决办法
1504
查看次数