Character with value 0x0a must be escaped
UPDATE gas_dev_ext as e
SET map_attr = jsonb_set(map_attr, '{addr}', (select concat('"',addr,'"') from gas_dev_base where id = e.id)::jsonb ,true)
> ERROR: invalid input syntax for type json
DETAIL: Character with value 0x0a must be escaped.
CONTEXT: JSON data, line 1: "253
这个错误是因为在JSON中存在一个无法解析的字符,具体是一个换行符(0x0a)需要进行转义。
你可以使用replace函数将换行符转义为\n,并在拼接字符串时添加一个额外的引号来解决这个问题。
以下是修改后的代码:
UPDATE gas_dev_ext AS e
SET map_attr = jsonb_set(map_attr, '{addr}', (SELECT CONCAT('"', REPLACE(addr, CHR(10), '\\n'), '"') FROM gas_dev_base WHERE id = e.id)::jsonb, true);
这样就能够成功执行更新操作了。注意在转义换行符时需要使用双斜杠\n。