如何在 Postgresql 中添加、更新和删除 Json 数据类型?
Posted
技术标签:
【中文标题】如何在 Postgresql 中添加、更新和删除 Json 数据类型?【英文标题】:How To Add,Update And Delete From Json DataType On Postgresql? 【发布时间】:2022-01-17 12:53:35 【问题描述】:这是我在 PostgreSQL 上的表格,带有联系人姓名:
-
我想用这个 sql 查询编辑 mobile1 值:
update contacts->info set mobile1 = JSON_SET(mobile1, "123456") where id=5
但是说 :: ERROR: syntax error at or near "->"
-
当我想用这个 sql 查询删除或添加一个值时:
delete orders->info->mobile2 where id=5
“订单”处或附近的语法错误
-
或添加
update orders->info set mobile3 = JSON_SET(mobile3, "123456") where id=5
“->”处或附近的语法错误
我的语法问题是什么?以及如何在 PostgreSQL 上的 json 数据类型表上添加、更新和删除
【问题讨论】:
不相关,但使用标准化数据设计会更多更好、更容易。 【参考方案1】:您的问题 1 的解决方案。
更新info
json 字段中的mobile1
json 值:
update contacts
set info = jsonb_set(info :: jsonb, 'mobile,mobile1', '123456', true) :: json
where id=5
您的问题 2 的解决方案。
从info
json 字段中删除mobile2
键/值对:
update contacts
set info = (info :: jsonb #- 'mobile,mobile2') :: json
where id=5
从联系人表中删除整行:
delete from contacts where id=5
您应该仔细阅读手册Chapter 6. Data Manipulation 和9.16. JSON Functions and Operators
【讨论】:
谢谢,您对问题 1 的解决方案出现了此错误:ERROR: column "123456" does not exist
问题 2 有效@ 问题 3 如何在我的手机上添加另一个问题,例如 mobile3=987456?
是的,我确实用双引号而不是单引号复制/粘贴了您的代码。我已经更新了我的答案。【参考方案2】:
根据Postgres document 的插入、更新或删除,您应该使用JSONB
操作或函数。
Demo
-
更新场景:
update contacts
set info = jsonb_set(info::jsonb, 'mobile,mobile1', '"123456"')::json
where id = 5;
-
删除场景:
update contacts
set info = (info::jsonb #- 'mobile,mobile2')::json
where id = 5;
-
添加场景:
update contacts
set info = jsonb_set(info::jsonb, 'mobile,mobile3', '"123456"')::json
where id = 5;
【讨论】:
感谢以上所有工作,如何在 1 个查询中添加多个手机号码,添加 mobile4、mobile5、mobile6 ? 如果需要可以使用dbfiddle.uk/…添加多个键以上是关于如何在 Postgresql 中添加、更新和删除 Json 数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
PostgreSQL 函数和触发器在 postgresql 中包含更改