Postgres中清空JSON列内vendor对象的所有属性
解决Postgres JSONB列清空动态属性对象的问题
正确的更新语句
直接用jsonb_set函数将vendor字段覆盖为空对象,不管它原来有多少动态属性:
UPDATE table_name SET data = jsonb_set(data::jsonb, '{vendor}', '{}'::jsonb);
为什么之前的方法无效
- 第一种写法
data::jsonb #- '{vendor.*}':#-操作符用于删除指定的JSON路径,但Postgres不支持用*作为通配符匹配子属性,这个语法本身不生效。 - 第二种写法
data::jsonb - '{vendor.*}'::text[]:-操作符用于删除JSONB对象的顶层键,vendor.*并不是实际存在的顶层键,所以不会产生任何修改。
验证结果
执行语句后,data列的结构会符合预期:
{ "headerText": "header text", "vendor": {}, "footerText": "some text" }
内容的提问来源于stack exchange,提问作者Vishnu
相关产品推荐
相关产品推荐

