You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postgresql中如何替换jsonb对象指定键对应值的特定文本

PostgreSQL 仅替换jsonb指定键对应值的文本实现方案

核心逻辑:不要将整个jsonb转字符串全局替换,而是单独提取目标键的值完成替换后写回原jsonb对象,避免影响其他键的值。

方案1:全版本兼容(支持PostgreSQL 9.5及以上)

使用内置jsonb_set函数实现,示例代码如下:

UPDATE content
SET dynamic_fields = jsonb_set(
    dynamic_fields,
    '{key2}', -- 指定要修改的键路径,顶层键直接写入数组即可
    to_jsonb(replace(dynamic_fields->>'key2', 'text1', 'text2')), -- 替换目标值后转为jsonb格式
    false -- 目标键不存在时不执行新增操作,有新增需求可改为true
)
WHERE id = 0; -- 按需添加过滤条件,避免全表误更新

方案2:简洁写法(支持PostgreSQL 14及以上)

可以用jsonb下标语法简化操作:

UPDATE content
SET dynamic_fields['key2'] = to_jsonb(replace(dynamic_fields->>'key2', 'text1', 'text2'))
WHERE id = 0;

注意事项

  • 若目标键为嵌套结构,例如要修改a.b.key2,只需将jsonb_set的路径参数改为'{a,b,key2}'即可
  • 可按需添加WHERE条件缩小更新范围:过滤存在目标键的行可加dynamic_fields ? 'key2',过滤目标键值为字符串的行可加jsonb_typeof(dynamic_fields->'key2') = 'string',进一步降低误更新风险
  • 如果需要批量处理全表符合条件的行,去掉id=0的过滤条件即可

内容的提问来源于stack exchange,提问作者Stefano De Rosso

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 01:06:10