在PL / pgSQL过程中将`jsonb_array_elements`的多行结果扩展为tsvector

时间:2015-07-29 11:50:01

标签: postgresql postgresql-9.4 tsvector

overflowers,

我有一个像这样的JSON数组(PostgreSQL 9.4):

[{name: "foo"},
 {name: "bar"},
 {name: "baz"}]

我想要的是将所有项目的名称连接到 tsvector -typed列,以便我可以在该列上创建索引。

如果我跑:

SELECT to_tsvector(array_to_string(array(SELECT jsonb_array_elements(items)->>'name' FROM store), ','))

我可以得到预期的结果:'foo': 1 'bar': 2 'baz': 3

但是我被困在这样的事情上:

CREATE OR REPLACE FUNCTION update_tsv()
RETURNS TRIGGER AS $$
BEGIN
    NEW.tsv = to_tsvector(jsonb_array_elements(NEW.items)->>'name');
    RETURN NEW;
END;
$$ language 'plpgsql';

to_tsvector抱怨多行。

附上sqlfiddle

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

你会这样做:

CREATE OR REPLACE FUNCTION update_tsv()
RETURNS TRIGGER AS $$
BEGIN
    NEW.tsv = to_tsvector(array_to_string(array( select json_array_elements(NEW.items)->>'name' ),' '));
    RETURN NEW;
END;
$$ language 'plpgsql';