将 JSON 数组合并为一个字符串

Merge JSON array to a single string

我有一个名为 qn 的字段,格式为 JSONB:

[{id: 1, text: 'A'}, {id: 2, text: 'B'}]

要获取所有文本,我可以这样做:

SELECT jsonb_array_elements(qn)->>'text' from templates where id=1

我的问题是,我怎样才能像这样合并成一个字符串:

A, B

如果字段不是 JSONB,可以使用以下方法轻松完成:

SELECT array_to_string(ARRAY(select title from templates), ', ');

字段是JSONB怎么办?

简单聚合成字符串:

SELECT string_agg(txt, ', ') AS all_text
FROM (
  SELECT jsonb_array_elements(qn)->>'text' AS txt
  FROM templates
  WHERE id = 1) sub;

抱歉,无法发表评论。主题启动器需要 tsvector 列。我对名为 article 的文本列有这样的结构,其中包含 json 数据,并且需要在键 text:

中搜索文本
{"time": "some time_structure", "data": {"blocks": [{"data": {"text": "Some long, long text", "image": "image_url"}}, {"data": {"text": "another long text"}}]}}

我是这样生成 tsvector 字段的:

setweight(to_tsvector('russian'::regconfig, jsonb_path_query_array(article::jsonb, '$.blocks[*].data.text')), 'C')