如何通过PostgreSQL UPDATE语句还原字符串化JSON并转为JSONB?
解决转义JSON字符串还原并修改列类型的问题
没问题,我帮你梳理一下具体的操作步骤,完全用SQL就能搞定这个遗留问题(以下操作基于PostgreSQL,因为你提到了jsonb类型):
第一步:将转义后的字符串还原为原始JSON对象
首先,我们需要把数据库里存储的转义JSON字符串(比如"{ \"foo\": \"bar\" }")还原成真正的JSON对象。假设你的表名为your_table,存储该字符串的列名为json_data,执行以下UPDATE语句:
UPDATE your_table SET json_data = replace(trim(json_data, '"'), '\"', '"')::json;
语句解释:
trim(json_data, '"'):去掉字符串外层包裹的双引号(因为JSON.stringify后的结果被转义存储时,会带上外层引号)replace(..., '\"', '"'):把字符串里转义的双引号\"替换成普通双引号",还原出合法的JSON结构::json:将处理后的字符串强制转换为JSON类型
第二步:修改列数据类型为jsonb
确认数据还原正确后,就可以把列类型改成jsonb了,执行ALTER TABLE语句:
ALTER TABLE your_table ALTER COLUMN json_data TYPE jsonb USING json_data::jsonb;
重要注意事项:
- 先备份数据:在执行UPDATE和ALTER操作前,一定要先备份表数据,避免操作失误导致数据丢失
- 分批处理大表:如果你的表数据量很大,直接执行全表UPDATE可能会锁表影响业务,建议按主键范围拆分分批更新
- 验证数据:操作完成后,可以用
SELECT json_data FROM your_table LIMIT 10;检查数据是否正确还原为JSON对象
内容的提问来源于stack exchange,提问作者Waelsy123
相关产品推荐
相关产品推荐

