У меня есть recommendations
таблица:
Table "public.recommendations"
Column | Type | Modifiers
-----------------------+-----------------------------+--------------------------------------------------------------
id | integer | not null default nextval('recommendations_id_seq'::regclass)
comment_on_provider | text |
created_at | timestamp without time zone | not null
updated_at | timestamp without time zone | not null
search_vector | tsvector |
Indexes:
"recommendations_pkey" PRIMARY KEY, btree (id)
"recommendations_search_vector_idx" gin (search_vector)
Triggers:
recommendations_vector_update BEFORE INSERT OR UPDATE ON recommendations FOR EACH ROW EXECUTE PROCEDURE search_trigger()
и этот триггер
CREATE OR REPLACE FUNCTION search_trigger() RETURNS trigger AS $$
DECLARE
search TEXT;
links_title TEXT;
links_description TEXT;
begin
SELECT string_agg(title, ' ') INTO links_title
FROM links
INNER JOIN recommendations
ON new.link_id = links.id;
SELECT string_agg(description, ' ') INTO links_description
FROM links
INNER JOIN recommendations
ON new.link_id = links.id;
search := '';
search := search || ' ' || coalesce(new.comment_on_provider);
search := search || ' ' || links_title;
search := search || ' ' || links_description;
new.search_vector := to_tsvector(search);
return new;
end
$$ LANGUAGE plpgsql;
CREATE TRIGGER recommendations_vector_update
BEFORE INSERT OR UPDATE ON recommendations
FOR EACH ROW EXECUTE PROCEDURE
search_trigger();
Когда я вставляю запись в таблицу recommendations
, триггер не срабатывает, и search_vector
устанавливается на ноль.
Но когда я обновляю любую запись, она срабатывает, и search_vector
обновляется с ожидаемыми значениями.
Как заставить работать триггер на INSERT
?