获取一列中的所有 jsonb 值以供在 to_tsvector 中使用

Get all jsonb values in one column for usage in to_tsvector

我得到了一个 table jsonb table t_1,其中包含 jsonb 类型的列 column_1,我需要将其转换为 table 字符串,这是 jsonb 值的连接

这是一个脚本

    CREATE TABLE t_1 (
       ID serial NOT NULL PRIMARY KEY,
       column_1 jsonb NOT NULL
    );


    INSERT INTO t_1 (column_1)
    VALUES
    (
       '{ "01": "Lily Bush", "03": "prod2uct"}'
    ),
    (
       '{ "41": "Josh William", "12": "product7"}'
    ),
    (
       '{ "07": "Mary Clark", "items" : "product2"}'
    );

我试过这个:

SELECT distinct jsonb_array_elements_text(column_1 -> jsonb_object_keys(column_1)) AS Actor FROM t_1

但是这个return'unable to extract elements from scalar'

我试过这个:

SELECT tiket, string_agg(column_2, ', ') as list FROM( SELECT column_1 ->> jsonb_object_keys(column_1) as column_2, id as tiket FROM t_1 ) as foo1 GROUP BY tiket

但这里是内部 select

如何在没有内部 select 的情况下获取一列中的所有 jsonb 值,类似于第一个查询?

我需要它在 to_tsvector

中使用

我需要在

中使用它
setweight(
to_tsvector('simple', column_with_json::text),
'A'
)

但是column_with_json::text不是我需要的,我需要获取值,没有键

有例子吗?

在横向连接中使用 jsonb_each_text()

SELECT id, string_agg(value, ', ') AS list
FROM t_1
CROSS JOIN jsonb_each_text(column_1)
GROUP BY id

 id |          list          
----+------------------------
  1 | Lily Bush, prod2uct
  2 | product7, Josh William
  3 | Mary Clark, product2
(3 rows)

如果要在条件中使用结果聚合值,请使用 HAVING 子句,例如:

SELECT id, string_agg(value, ', ') AS list
FROM t_1
CROSS JOIN jsonb_each_text(column_1)
GROUP BY id
HAVING string_agg(value, ', ') LIKE '%Lily%'

或包装器查询中的派生 table 和 WHERE 子句:

SELECT *
FROM (
    SELECT id, string_agg(value, ', ') AS list
    FROM t_1
    CROSS JOIN jsonb_each_text(column_1)
    GROUP BY id
    ) s
WHERE list LIKE '%Lily%'

这两种方法基本上是等效的,在典型情况下它们生成相同的查询计划。在两者中,聚合只计算一次。