我有一个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;
但是,当我尝试创建触发器时,它会抛出两个错误:
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
^
据我所知,如果我使用触发器过程语法,比如:
CREATE OR REPLACE FUNCTION something() RETURNS TRIGGER
然后将我的函数与触发器关联,那么我将无法使用内置的tsvector_update_trigger
函数,而需要自己处理ts_vector
操作。因此我尝试使用一体化的触发器+过程语法...有什么建议吗?