PostgreSQL中的jsonb类型

jsonb操作符

  • @>判断某个jsonb类型的字段中是否包含某个值
    例: where data_json @> {"name":"tag","value":"val1"}

  • ->通过key获取json或jsonb中的元素,返回值是json或jsonb

    1. json由数组格式构成

      '[{"key1":"val1","key2":"val2"},{"key3":"val3"}]'

      sqldata_json -> 1会得到 {"key3":"val3"}

    2. json由非数组格式构成

      {“key1”:“val1”, “key2”:“val2”}

      sqldata_json -> 'key1'会得到 val1
      例如:select * from table1 where data_json ->> 'key1' like '%va%'

  • ->>通过key获取json或jsonb中的元素,并转换成字符串,返回值是文本,其他同->
    例如:在这里插入图片描述

  • #>获取json子元素,返回json

  • #>>获取json子元素,返回文本

jsonb操作函数

https://www.postgresql.org/docs/9.4/functions-json.html

案例

将表中json类型的字段中的指定key对应的value值更新为同记录的其他字段的值

-- 将table_a表中的data_json字段(jsonb类型)中 key为address对应的value值更新为  other_column 字段的值
update table_a
set data_json = data_json || concat('{"address"":', "other_column", '"}')::jsonb where <condition>;

更新前

other_column(varchar)data_json(jsonb)
航海路{“address”:“北京路”, “mobile”:“111111111”, “num”:89}

更新后

other_column(varchar)data_json(jsonb)
航海路{“address”:“航海路", “mobile”:“111111111”, “num”:89}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL ,`JSONB` 和 `text` 是两种不同的字段类型,分别用于存储不同类型的数据。 1. 存储方式: - `JSONB` 类型JSON 数据进行解析、验证和优化存储。它使用二进制格式存储 JSON 数据,以提高查询和索引的性能。JSONB 类型支持所有 JSON 数据类型,包括对象、数组、字符串、数字、布尔值和 null。 - `text` 类型是用于存储任意文本数据的一种通用类型。它不会对数据进行解析或验证,只是简单地将文本数据存储为字符串。 2. 查询和操作: - `JSONB` 类型提供了专门针对 JSON 数据的查询和操作函数,例如 `jsonb_extract_path`、`jsonb_array_length` 等。这些函数可用于从 JSONB 字段提取特定的值、搜索特定的键或值,以及对 JSON 数据进行修改和更新。 - `text` 类型在操作时需要使用通用的字符串函数,如 `LIKE`、`SUBSTRING` 等。这些函数无法直接处理 JSON 数据结构,需要自行编写解析逻辑。 3. 索引和性能: - `JSONB` 类型支持 GIN(Generalized Inverted Index)索引,可以加速 JSON 数据的查询。GIN 索引可以在 JSON 字段上进行全文搜索、键值搜索等操作,提高查询性能。 - `text` 类型可以使用通用的 B-tree 索引,但无法对 JSON 数据进行特定的索引优化。 综上所述,如果需要存储和操作 JSON 数据,并且需要高效的查询性能和索引支持,推荐使用 `JSONB` 类型。如果只是存储和展示普通的文本数据,可以使用 `text` 类型。 希望能解答你的问题!如有其他疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值