首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

PostgreSQL JSON/JSONB 查询与操作指南

  • 25-02-18 11:21
  • 2585
  • 13232
blog.csdn.net

PostgreSQL 提供了强大的 JSON 和 JSONB 数据类型及相关操作,适用于存储和查询半结构化数据。本文将详细介绍其常用操作。


1. 基础操作

1.1 JSON 属性访问

  • ->: 返回 JSON 对象中的值,结果为 JSON 格式。
SELECT '{"a": {"b": 1}}'::jsonb -> 'a';
-- 返回:{"b": 1}
  • 1
  • 2
  • ->>: 返回 JSON 对象中的值,结果为文本。
SELECT '{"a": {"b": 1}}'::jsonb -> 'a' ->> 'b';
-- 返回:"1" (文本)
  • 1
  • 2

1.2 JSON 数组访问

  • 索引访问数组元素:
SELECT '[1, 2, 3]'::jsonb -> 1;
-- 返回:2 (JSON 格式)
  • 1
  • 2
  • 获取数组中某元素的文本:
SELECT '[1, 2, 3]'::jsonb ->> 1;
-- 返回:"2" (文本)
  • 1
  • 2

2. 高级操作

2.1 查询嵌套 JSON 的值

  • 使用 #> 获取嵌套对象:
SELECT '{"a": {"b": {"c": 3}}}'::jsonb #> '{a,b}';
-- 返回:{"c": 3}
  • 1
  • 2
  • 使用 #>> 获取嵌套对象的文本值:
SELECT '{"a": {"b": {"c": 3}}}'::jsonb #>> '{a,b,c}';
-- 返回:"3" (文本)
  • 1
  • 2

2.2 条件查询

通过字段筛选数据
SELECT *
FROM example_table
WHERE jsonb_column ->> 'key' = 'value';
  • 1
  • 2
  • 3
判断是否包含特定键值对
SELECT *
FROM example_table
WHERE jsonb_column @> '{"key": "value"}';
  • 1
  • 2
  • 3
判断是否包含特定键
SELECT *
FROM example_table
WHERE jsonb_column ? 'key';
  • 1
  • 2
  • 3
判断是否包含多个键
  • 任意一个键:
SELECT *
FROM example_table
WHERE jsonb_column ?| array['key1', 'key2'];
  • 1
  • 2
  • 3
  • 所有键:
SELECT *
FROM example_table
WHERE jsonb_column ?& array['key1', 'key2'];
  • 1
  • 2
  • 3

2.3 数组操作

判断数组是否包含元素
SELECT *
FROM example_table
WHERE jsonb_column @> '[1, 2]'; -- JSON 数组包含 [1, 2]
  • 1
  • 2
  • 3
判断数组是否重叠
SELECT *
FROM example_table
WHERE jsonb_column ?| array['key1', 'key2'];
  • 1
  • 2
  • 3

3. 修改 JSON 数据

3.1 添加键值

UPDATE example_table
SET jsonb_column = jsonb_column || '{"new_key": "new_value"}';
  • 1
  • 2

3.2 删除键

  • 删除单个键:
UPDATE example_table
SET jsonb_column = jsonb_column - 'key_to_remove';
  • 1
  • 2
  • 删除多个键:
UPDATE example_table
SET jsonb_column = jsonb_column - '{key1, key2}';
  • 1
  • 2

3.3 替换嵌套值

  • 使用 jsonb_set 替换嵌套值:
UPDATE example_table
SET jsonb_column = jsonb_set(jsonb_column, '{nested,key}', '"new_value"');
  • 1
  • 2

4. 聚合操作

4.1 提取 JSON 中的字段值

SELECT jsonb_column ->> 'key', COUNT(*)
FROM example_table
GROUP BY jsonb_column ->> 'key';
  • 1
  • 2
  • 3

4.2 将多个 JSON 合并

SELECT jsonb_agg(jsonb_column)
FROM example_table;
  • 1
  • 2

4.3 展开 JSON 数组

SELECT jsonb_array_elements(jsonb_column)
FROM example_table;
  • 1
  • 2

5. 索引优化

5.1 创建 JSONB 索引

创建 GIN 索引
CREATE INDEX idx_jsonb_column ON example_table USING gin (jsonb_column);
  • 1
使用 JSONB 索引进行快速查询
SELECT *
FROM example_table
WHERE jsonb_column @> '{"key": "value"}';
  • 1
  • 2
  • 3
创建键路径索引
CREATE INDEX idx_jsonb_key ON example_table USING gin ((jsonb_column -> 'key'));
  • 1

PostgreSQL 的 JSONB 查询功能强大且灵活,适合各种复杂的数据处理场景。结合索引优化,性能可以进一步提升。


? 开发者必备工具: 在 Tool.tushuoit.com 发现免费在线工具集!推荐 App Store 截图生成器、应用图标生成器 和 Chrome插件-强制开启复制-护眼模式-网页乱码设置编码,让您的开发和运营工作更轻松高效。

四楼没电梯
微信公众号
一个每天爬楼梯的程序员的随机分享
注:本文转载自blog.csdn.net的@井九的文章"https://blog.csdn.net/problc/article/details/144443302"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

112
数据库
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top