PostgreSQL使用jsonb_set更新JSON报错:无效JSON输入语法
SQL更新语句错误排查与解决
错误根源
jsonb_set函数的第三个参数必须是有效的JSON格式值。你传入的'9323fce7-416e-40be-802f-ee173f246907'是普通字符串,但JSON语法要求字符串必须用双引号包裹,PostgreSQL尝试将其解析为JSON值时,因格式不符合规则报错。
修正后的SQL语句
方式一:转义双引号
UPDATE "CET_User" SET "Property" = jsonb_set("Property", '{"Tid"}', '"9323fce7-416e-40be-802f-ee173f246907"') WHERE ("Property" ->> 'Tid') = '33bc69e8-0715-4b86-8611-67070c5c744d';
方式二:使用美元引号(避免转义,更清晰)
UPDATE "CET_User" SET "Property" = jsonb_set("Property", '{"Tid"}', $json$"9323fce7-416e-40be-802f-ee173f246907"$json$) WHERE ("Property" ->> 'Tid') = '33bc69e8-0715-4b86-8611-67070c5c744d';
补充说明
jsonb_set的第三个参数要求为jsonb类型,只有符合JSON语法的值才能被正确解析。给字符串加上双引号后,它才是有效的JSON字符串值。- 原语句中WHERE子句的
- >>是笔误,应改为->>(JSON字段提取操作符)。
内容的提问来源于stack exchange,提问作者lyj
相关产品推荐
相关产品推荐

