tsearch2 добавить набор результатов в индекс - PullRequest
0 голосов
/ 08 августа 2011

Как я могу добавить набор результатов (более одной записи) в tsvector? Я использую postgres 8.3. У меня есть отношение m-n, и я хотел бы иметь все значения из одного столбца n-стороны в tsvector m-стороны. Это утверждение будет работать, если у меня есть ограничение на один подвыбор. Но не без лимита.

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 голосов
/ 09 августа 2011

Сначала в Postgres 8.3 мне нужно создать агрегатную функцию для генерации массива из выбора.

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), '')
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...