讲师中心 微信公众号
AI工具推荐 视频效率加速

PostgreSQL如何实现根据JSONB字段内容删除_利用路径操作符

轻墨君_5721

轻墨君_5721

发布时间:2026-04-24 09:24:46

|

809人浏览过

|

来源于php中文网

原创

<p>PostgreSQL 的 #- 操作符用于安全删除 JSONB 中指定路径的键,接收 jsonb 值和 text[] 路径数组,路径必须精确匹配嵌套结构,不支持通配符,删除后空对象不自动收缩。</p>

postgresql如何实现根据jsonb字段内容删除_利用路径操作符

用 #- 操作符删除 JSONB 中指定路径的键

PostgreSQL 的 jsonb 类型原生支持按路径删除字段,核心就是 #- 操作符(注意是减号,不是连字符或破折号)。它接收一个 jsonb 值和一个文本路径数组(text[]),返回删除对应路径后的新 jsonb 值。

路径数组写法必须严格匹配嵌套结构:顶层键用单元素数组,如 {'a'};嵌套对象用多元素,如 {'c','d'} 表示 c.d;数组索引用字符串数字,如 {'items','0','name'}。

  • #- 是「安全删除」:路径不存在时直接返回原值,不报错
  • 只能删除「整个路径指向的值」,不能删掉中间某个键却保留其父对象空壳(比如删 c.d 后 c 还在,哪怕只剩 {})
  • 不支持通配符或正则,路径必须精确指定

示例:从 {"a": "foo", "b": "BARK", "c": {"d": "dog"}} 中删掉 c.d:

UPDATE my_table SET data = data #- '{c,d}' WHERE id = 123;

批量删除多个路径要用多次 #- 链式调用

#- 每次只接受一个路径数组,没法一次传多个。想删多个字段,得连续用 #-,顺序无关,但每次都是对上一步结果操作。

常见错误是试图传二维数组或逗号分隔字符串——PostgreSQL 会直接报错 ERROR: operator does not exist: jsonb - text。

  • 正确写法:data #- '{a}' #- '{c,d}' #- '{items,1,flag}'
  • 错误写法:data #- '{a,c,d}'(这会被当成一个三级路径 a.c.d)
  • 错误写法:data #- ARRAY['a','c,d'](类型不匹配)

如果路径来自变量或子查询,建议用 COALESCE 包一层防止 NULL 导致整条表达式为 NULL:

chartjs-reporter
chartjs-reporter

此技能用于在用户需要将结构化数据(查询结果、CSV 摘要、JSON 记录或 Python 字典/列表)转换为独立的 HTML 页面时使用。

下载
UPDATE my_table SET data = COALESCE(data #- '{tmp}', data) WHERE ...;

删除后空对象不会自动收缩,需手动清理

#- 只负责移除目标路径,不管父结构是否变空。比如删掉 c.d 后 c 变成 {},它依然存在;删掉 a 后顶层可能只剩 {},但字段值仍是合法 jsonb。

若业务要求「删净空壳」,得额外用 jsonb_strip_nulls() 或条件逻辑判断。但注意:jsonb_strip_nulls() 只删 null 值,不删空对象/空数组。

  • 空对象 {} 和空数组 [] 不会被 jsonb_strip_nulls() 处理
  • 真要收缩,得用 jsonb_set() + jsonb_typeof() 手动检测并替换,代价高,慎用
  • 多数场景留着空对象不影响查询,没必要强求“物理干净”

WHERE 条件中用路径判断再删除,避免误删

直接 UPDATE ... SET data = data #- '{x}' 是无条件删除,风险高。更稳妥的是先用路径操作符查出符合条件的记录,再删。

常用判断方式:

  • 检查键是否存在:data ? 'a'
  • 检查嵌套键是否存在:data @> '{"c":{"d":null}}'(注意 null 占位)
  • 检查具体值:(data #>> '{c,d}') = 'dog'
  • 检查是否为对象类型:jsonb_typeof(data -> 'c') = 'object'

组合使用可精准控制范围,例如只删 c.d 值为 "cat" 且 c 是对象的记录:

UPDATE my_table SET data = data #- '{c,d}' 
WHERE data ? 'c' 
  AND jsonb_typeof(data -> 'c') = 'object' 
  AND (data #>> '{c,d}') = 'cat';

路径操作符的语义和性能都依赖底层二进制解析,只要路径写对、类型匹配,就基本不会踩到隐式转换或编码陷阱——但一旦路径写错(比如大小写、下划线漏掉),就会静默失效,这点最容易被忽略。

热门AI工具

更多
WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

咔片AIPPT

一款在线AI演示文稿制作工具,可根据主题和内容需求辅助生成PPT结构与页面,提高演示材料制作效率。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2175

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3362

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1136

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

3859

2025.09.10

postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.10.10

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

4609

2023.11.02

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、l、c、dt、d table_name、du、i file_name、e和q等。更详细的postgresql常用命令,大家可以访问下面的文章。

647

2023.11.16

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有l、d、d5、di、ds、dv、df、dn、db、dg、dp、c、pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

1396

2023.11.20

Gradle插件开发入门教程
Gradle插件开发入门教程

本专题介绍Gradle插件开发的基本流程,涵盖插件类编写、自定义任务注册、扩展参数设计和插件应用方法,帮助你理解插件如何组织构建逻辑,减少多个项目之间的重复配置。

20

2026.10.22

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 21.1万人学习

JS进阶与BootStrap学习
JS进阶与BootStrap学习

共39课时 | 4.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn