在PostgreSQL中转义字符
问题描述:
我有一个从社交媒体填充的非常大的数据库。我正在尝试创建一个新列来为word_counter创建JSON以加快分析速度。在PostgreSQL中转义字符
我第一次在PostgreSQL中创建一个函数来获取字符串数组,计算出现次数并返回一个插入的jsonb。以下是功能
CREATE
OR REPLACE FUNCTION count_elements (TEXT []) RETURNS JSONB AS $$
DECLARE js JSONB := '{}' ;
DECLARE jjson JSONB ;
BEGIN
SELECT
jsonb_agg (
(
'{"' || i|| '":"' || C || '"}'
) :: JSONB
) INTO jjson
FROM
(
SELECT
i,
COUNT (*) C
FROM
(SELECT UNNEST($1 :: TEXT []) i) i
GROUP BY
i
ORDER BY
C DESC
) foo ; RETURN jjson ;
END ; $$ LANGUAGE plpgsql;
这是问题所在。当运行下面的查询
select count_elements(string_to_array(lower(tweet_text), ' ')),tweet_text from tweet_database
limit 10
我得到这个错误
[Err] ERROR: invalid input syntax for type json
DETAIL: Character with value 0x0a must be escaped.
CONTEXT: JSON data, line 1: {"winning?
SQL statement "SELECT
我试图逃避列,然后正则表达式替换一些项目,但还没有工作。
答
的to_json
功能可以用来逃生的文字:
SELECT
jsonb_agg (
(
'{' || to_json(i) || ':' || C || '}'
) :: JSONB
) INTO jjson
然后
select count_elements(E'{a, a, b, a\nb, a}'::text[]);
结果
[{"a":3}, {"b":1}, {"a\nb":1}]
'to_json'将执行转义为您服务。 – teppic