2011-08-08 11 views
0

tsvectorに結果セット(複数のエントリ)を追加するにはどうすればよいですか?私はpostgres 8.3を使用します。 私はm-nの関係にあり、m側のtsベクトルのn側の1つの列からすべての値を得たいと考えています。 この文は、subselectに1つの制限がある場合に機能します。しかし、限界がないわけではない。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), '') 
) 
関連する問題