PostgreSQL jsonb列如何实现已有JSON数据的增量追加与更新操作
PostgreSQL jsonb列增量追加/更新嵌套键值对方案
你之前用||操作符出现格式化问题,是因为直接将新的profile结构与顶层jsonb对象拼接,没有定位到user_profile嵌套层级进行操作。以下是两种可直接落地的实现方案,同时支持新增profile和覆盖更新已存在的profile:
方案1:使用jsonb_set实现(推荐,语义更清晰)
UPDATE myjsontab SET jsonb_details = jsonb_set( jsonb_details, '{user_profile}', -- 定位到顶层的user_profile字段 -- 原有user_profile对象与新的profile键值对拼接,存在则覆盖,不存在则新增 jsonb_details -> 'user_profile' || '{"admin staff": { "profile_name":"admin staff", "user_status":"NEW", "user_state":"admin upload", "s3url":"abc/" }}'::jsonb );
方案2:直接用||操作符改写顶层结构
UPDATE myjsontab SET jsonb_details = jsonb_details || jsonb_build_object( 'user_profile', jsonb_details -> 'user_profile' || '{"admin staff": { "profile_name":"admin staff", "user_status":"NEW", "user_state":"admin upload", "s3url":"abc/" }}'::jsonb );
注意事项
- 追加的JSON字符串必须显式转换为
jsonb类型,否则会触发类型不匹配错误,这是之前格式化问题的常见诱因 - 如需批量追加多个profile,只需在拼接的JSON对象中添加多组键值对即可,无需执行多次更新操作
内容的提问来源于stack exchange,提问作者tenet testuser1
相关产品推荐
相关产品推荐

