tsearch2将结果集添加到索引

时间:2011-08-08 16:02:56

标签: postgresql

如何向tsvector添加结果集(多个条目)?我使用postgres 8.3。 我有一个m-n关系,我希望从m侧的tsvector中的n侧的一列获得所有值。 如果我对子选择有一个限制,则此语句将起作用。但并非没有限制。

UPDATE mytable
    SET mytsvector=to_tsvector('english', 
        coalesce(column_a, '') ||' '|| 
        coalesce((SELECT item FROM other_table WHERE id = other_id LIMIT 1), '')
    )



ERROR:  more than one row returned by a subquery used as an expression

1 个答案:

答案 0 :(得分:0)

首先,在Postgres 8.3中,我必须创建一个聚合函数,以便从select中生成一个数组。

CREATE AGGREGATE array_accum ( 
   sfunc = array_append, 
   basetype = anyelement, 
   stype = anyarray, 
   initcond = '{}' 
);

自8.4以来,函数array_agg()。

孔语句如下所示:

UPDATE mytable
SET mytsvector=to_tsvector('english', 
    coalesce(column_a, '') ||' '|| 
    coalesce(
        (SELECT array_to_string(array_accum(item), ' ') 
         FROM mytable m, other_table o 
         WHERE o.id = m.other_id AND m.id = id GROUP BY m.id), '')
)