Postgres - 转义标签字符

时间:2015-12-04 15:18:46

标签: sql json postgresql escaping jsonb

在我的Postrges表格中,我有一个reasonvarchar,我需要使用其vaue填充jsonbreasons

我正在使用如下查询:

UPDATE table
SET reasons = ('{"' || reason || '": ' || amount::text || '}')::jsonb

我收到错误,告诉我需要转义0x09(制表符)字符,因为某些reason字段包含制表符列。

如何逃避reason值?

2 个答案:

答案 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)