本文介绍了在PL / pgSQL过程中将jsonb_array_elements的多行结果扩展到tsvector的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
过花,
我有一个JSON数组项目,例如(PostgreSQL 9.4):
[{name: foo},
{name: bar},
{name: baz}]
我想要的是将所有项目的名称连接到 tsvector
如果我运行:
SELECT to_tsvector(array_to_string(array(SELECT jsonb_array_elements(items)->>'name'FROM store),','))
我可以得到预期的结果:'foo':1'bar':2'baz':3
但是我遇到了这样的问题:
创建或替换功能update_tsv()
返回触发器为$$
开始
NEW.tsv = to_tsvector(jsonb_array_elements(NEW.items)->>'name');
返回新;
END;
$$语言 plpgsql;
to_tsvector
抱怨有多行。 / p>
已附加。
任何帮助将不胜感激!
解决方案
您会尝试吗?像这样:
创建或替换功能update_tsv()
将触发器作为$$
开始
NEW.tsv = to_tsvector(array_to_string(array(select json_array_elements(NEW.items)->>'name'),''));;
返回新;
END;
$$语言 plpgsql;
overflowers,
I have a JSON array items like this (PostgreSQL 9.4):
[{name: "foo"},
{name: "bar"},
{name: "baz"}]
What I want is to concatenate all item's name into a tsvector-typed column so that I can create index on that column.
And if I run:
SELECT to_tsvector(array_to_string(array(SELECT jsonb_array_elements(items)->>'name' FROM store), ','))
I can get an expected result: 'foo': 1 'bar': 2 'baz': 3
But I got stuck at something like this:
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';
The to_tsvector
complains about multiple rows.
A sqlfiddle is attached.
Any help will be extremely appreciated!
解决方案
Would you try like this:
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';
这篇关于在PL / pgSQL过程中将jsonb_array_elements的多行结果扩展到tsvector的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!