2011-08-08 70 views
0

如何將結果集(多個條目)添加到tsvector?我使用postgres 8.3。 我有一個m-n的關係,我想從m側的tsvector中的n側的一列中獲得所有的值。 如果我對子查詢有一個限制,此聲明將起作用。但並非沒有限制。tsearch2將結果集添加到索引

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 

回答

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), '') 
) 
相關問題