如何创建删除尾随空格的快速触发器

How to create fast trigger which removes trailing spaces

我试图创建删除尾随 space 的触发器。为了加快速度,我指定它只在列实际包含前导 space:

时才执行
create table rid (nimetus varchar(50));
CREATE OR replace FUNCTION public.TrimRid() RETURNS trigger AS $$
    BEGIN
        NEW.nimetus:= TRIM(trailing from NEW.nimetus);
        RETURN NEW;
    END
$$ LANGUAGE plpgsql;

CREATE TRIGGER rid_trim_trig BEFORE INSERT OR UPDATE OF nimetus
   ON rid WHEN (NEW.nimetus like '% ') EXECUTE PROCEDURE public.TrimRid();

这段代码抛出错误

ERROR:  statement trigger's WHEN condition cannot reference column values
LINE 10:    ON rid WHEN (NEW.nimetus like '% ') EXECUTE PROCEDURE pub...
                         ^
SQL state: 42P17
Character: 304

如何在 Postgres 中创建用于删除尾随 space 的快速触发器?

默认情况下,未指定时,触发器创建为语句级触发器。但是,仅行级触发器可以在 WHERE 子句中使用行列。

所以触发器创建语句应该包含FOR EACH ROW子句:

CREATE TRIGGER rid_trim_trig
  BEFORE INSERT OR UPDATE OF nimetus ON rid
  FOR EACH ROW
  WHEN (NEW.nimetus like '% ') EXECUTE PROCEDURE public.TrimRid();

CREATE TRIGGER 文档中有更多内容。