Postgres JSON字段怎么修改key的名称

场景

当你不小心将 key 的名称写错了(人员类别:多了一个冒号),或者想把引文改为中文(type改为类型

大致思路是添加一个新的 key,然后将旧的 key 删除

sql语句

假如 JSON 列为 extra

  • 可以使用 extra::jsonb ->> 'type' 获取到 type 的值 ->> 以text形式获得 JSON 对象域 '{"a":1,"b":2}'::json->>'b' 2
  • 可以使用 extra::jsonb - 'type'type 删除 - 从左操作数删除键/值对或者string 元素。键/值对基于它们的键值来匹配。 '{"a": "b"}'::jsonb - 'a'
  • 可以使用 jsonb_set 来修改 json 列中的值 jsonb_set(target jsonb, path text[], new_value jsonb[,create_missing boolean]) 返回target,其中由 path指定的节用 new_value替换,如果 path指定的项不存在并且 create_missing为真(默认为 true)则加上 new_value。正如面向路径的 操作符一样,出现在path中的 负整数表示从 JSON 数组的末尾开始数。 jsonb_set('[{"f1":1,"f2":null},2,null,3]', '{0,f1}','[2,3,4]', false) jsonb_set('[{"f1":1,"f2":null},2]', '{0,f3}','[2,3,4]') [{"f1":[2,3,4],"f2":null},2,null,3] [{"f1": 1, "f2": null, "f3": [2, 3, 4]}, 2]

学习了以上知识点,就可以组合使用,最终的 sql 语句如下:

sql 复制代码
UPDATE table_name
SET extra = jsonb_set(extra::jsonb - 'type', '{类型}', extra::jsonb ->> 'type')
WHERE extra ->> 'type' is not null;

参考链接:

相关推荐
洛阳泰山19 天前
Chainlit集成Langchain并使用通义千问实现和数据库交互的网页对话应用增强扩展(text2sql)
数据库·python·langchain·交互·通义千问·postgres·chainlit
wangmarkqi24 天前
pgrx在docker中问题无法解决
运维·docker·容器·rust·postgres
洛阳泰山2 个月前
Chainlit快速实现AI对话应用将聊天数据的持久化到postgres关系数据库中
人工智能·ai·llm·postgres·chatlit
墨松笔记5 个月前
在PostgreSQL中如何处理跨表的级联删除和更新?
数据库·postgresql·postgres
墨松笔记5 个月前
在PostgreSQL中如何实现分区表以提高查询效率和管理大型表?
数据库·postgresql·postgres
墨松笔记5 个月前
如何为Postgres数据库设置安全的访问控制和权限管理
数据库·postgresql·postgres
墨松笔记5 个月前
如何在PostgreSQL中使用pg_stat_statements插件进行SQL性能统计和分析?
数据库·sql·postgresql·postgres
墨松笔记5 个月前
在PostgreSQL中如何实现递归查询,例如使用WITH RECURSIVE构建层次结构数据?
数据库·postgresql·postgres
墨松笔记5 个月前
在PostgreSQL中如何有效地批量导入大量数据,并确保数据加载过程中的性能和稳定性?
数据库·postgresql·postgres