将 `jsonb_array_elements` 的多行结果扩展到 PL/pgSQL 过程中的 tsvector
Expand multiple rows result of `jsonb_array_elements` to tsvector inside a PL/pgSQL procedure
花开,
我有一个 JSON 数组 items 像这样 (PostgreSQL 9.4):
[{name: "foo"},
{name: "bar"},
{name: "baz"}]
我想要的是将所有项目的 name 连接到 tsvector 类型的列中,以便我可以在该列上创建索引。
如果我 运行:
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
抱怨多行。
任何帮助将不胜感激!
你会这样试试吗:
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';
花开,
我有一个 JSON 数组 items 像这样 (PostgreSQL 9.4):
[{name: "foo"},
{name: "bar"},
{name: "baz"}]
我想要的是将所有项目的 name 连接到 tsvector 类型的列中,以便我可以在该列上创建索引。
如果我 运行:
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
抱怨多行。
任何帮助将不胜感激!
你会这样试试吗:
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';