У меня есть столбец tsvector
, который я хочу обновить при изменении строки. Для INSERT
я использую этот триггер:
CREATE TRIGGER albums_vector_insert BEFORE INSERT
ON albums
FOR EACH ROW EXECUTE PROCEDURE
tsvector_update_trigger('search_vector', 'pg_catalog.english', 'name')
Что, похоже, работает нормально Я хотел бы использовать другой триггер в предложениях UPDATE
, но я хочу, чтобы он срабатывал только тогда, когда имя действительно меняется, поэтому я не теряю циклы обновления вектора поиска без необходимости. Я пробовал это:
CREATE TRIGGER albums_vector_update BEFORE UPDATE ON albums
FOR EACH ROW EXECUTE PROCEDURE
IF NEW.name <> OLD.name THEN
tsvector_update_trigger(search_vector, 'pg_catalog.english', name);
END IF;
Но при попытке создать триггер выдается 2 ошибки:
Error : ERROR: syntax error at or near "NEW"
LINE 3: IF NEW.name <> OLD.name THEN
^
Error : ERROR: syntax error at or near "IF"
LINE 1: END IF
^
Насколько я понимаю, если я использую синтаксис триггерной процедуры, ala:
CREATE OR REPLACE FUNCTION something() RETURNS TRIGGER
затем свяжите мою функцию с триггером, тогда я не смогу использовать встроенную функцию tsvector_update_trigger
, и мне придется самостоятельно обрабатывать манипуляции с ts_vector
. Поэтому я пытаюсь использовать синтаксис «все в одном триггере +» ...
Есть идеи?