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

如何从PostgreSQL的text类型JSON数据列中删除指定对象

你之前操作失效的核心原因是jsondata列是text类型,无法直接使用PostgreSQL的JSON操作函数,需要先做类型转换再处理。

解决方案

临时查询(仅查看删除b字段后的结果,不修改原数据)

SELECT (jsondata::jsonb - 'b')::text AS jsondata_without_b 
FROM acqdata;

永久更新表数据

直接全表更新的语句:

UPDATE acqdata
SET jsondata = (jsondata::jsonb - 'b')::text;

如果部分行的jsondata内容不符合JSON格式,会导致更新报错,可以加过滤条件跳过非法数据:

-- PostgreSQL 16及以上版本可用
UPDATE acqdata
SET jsondata = (jsondata::jsonb - 'b')::text
WHERE jsondata IS NOT NULL 
  AND jsondata != ''
  AND jsonb_valid(jsondata);
-- 低于16的版本可用
UPDATE acqdata
SET jsondata = (jsondata::jsonb - 'b')::text
WHERE jsondata IS NOT NULL 
  AND jsondata != ''
  AND pg_input_is_valid(jsondata, 'jsonb');

长期优化建议

如果你后续需要频繁操作该列的JSON内容,建议直接将列类型修改为jsonb,后续JSON操作更简单、性能更高:

-- 修改列类型为jsonb
ALTER TABLE acqdata 
ALTER COLUMN jsondata TYPE jsonb 
USING jsondata::jsonb;

-- 修改后删除b字段的更新语句可以简化为
UPDATE acqdata SET jsondata = jsondata - 'b';

内容的提问来源于stack exchange,提问作者Abrar Sheik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:48:03