在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 

我试图逃避列,然后正则表达式替换一些项目,但还没有工作。

+0

'to_json'将执行转义为您服务。 – teppic

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}]