在我的Postrges表格中,我有一个reason
列varchar
,我需要使用其vaue填充jsonb
列reasons
。
我正在使用如下查询:
UPDATE table
SET reasons = ('{"' || reason || '": ' || amount::text || '}')::jsonb
我收到错误,告诉我需要转义0x09(制表符)字符,因为某些reason
字段包含制表符列。
如何逃避reason
值?
答案 0 :(得分:1)
我建议将制表符替换为空格:
UPDATE a_table
SET reasons = ('{"' || replace(reason, e'\t', ' ') || '": ' || amount::text || '}')::jsonb
答案 1 :(得分:1)
如果你想创建一个保证可以解析为json
&的字符串。 jsonb
,使用to_json()
(自9.3起):
(并使用coalesce()
,如果您的列可以包含NULL
s。)
UPDATE table
SET reasons = ('{' || to_json(COALESCE(reason, '')) || ':' || COALESCE(to_json(amount), 'null') || '}')::jsonb
或者,使用json_build_object()
(可从9.4获得):
UPDATE table
SET reasons = json_build_object(COALESCE(reason, ''), amount)::jsonb
从9.5开始,您可以使用jsonb_build_object()
直接构建jsonb
:
UPDATE table
SET reasons = jsonb_build_object(COALESCE(reason, ''), amount)