PostgreSQL中如何通过查询修改JSONB字段的键名?
PostgreSQL JSONB列批量修正键名(total_count改为count)
完全可以直接通过SQL查询批量修正,无需逐条取出记录更新。利用PostgreSQL自带的JSONB操作函数就能实现高效批量修改。
基础修正语句(覆盖已有count值)
如果希望当记录同时存在count和total_count时,用total_count的值覆盖原count,执行以下UPDATE语句:
UPDATE your_table SET your_jsonb_column = your_jsonb_column || jsonb_build_object('count', your_jsonb_column->'total_count') - 'total_count' WHERE your_jsonb_column ? 'total_count';
语句说明:
your_jsonb_column->'total_count':提取错误键total_count对应的值jsonb_build_object('count', ...):生成包含正确键count的JSON对象||:JSONB合并操作,将新的键值对合并到原对象(已有count则被覆盖)- 'total_count':从原对象中删除错误键WHERE子句:仅处理包含错误键的记录,避免无效更新
保留原count值的修正语句
如果要保留原count的值(仅当记录没有count时才用total_count的值填充),可以用CASE分支处理:
UPDATE your_table SET your_jsonb_column = CASE WHEN your_jsonb_column ? 'count' THEN your_jsonb_column - 'total_count' ELSE your_jsonb_column || jsonb_build_object('count', your_jsonb_column->'total_count') - 'total_count' END WHERE your_jsonb_column ? 'total_count';
执行前验证
为避免误操作,建议先通过SELECT语句预览修正结果:
SELECT your_jsonb_column AS original, your_jsonb_column || jsonb_build_object('count', your_jsonb_column->'total_count') - 'total_count' AS corrected FROM your_table WHERE your_jsonb_column ? 'total_count';
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

