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

Sql 如何创建删除尾随空格的快速触发器,sql,postgresql,plpgsql,database-trigger,Sql,Postgresql,Plpgsql,Database Trigger,我试图创建删除尾随空格的触发器。为了设置它,我指定只有在列实际包含前导空格时才执行它: 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 $$ LANG

我试图创建删除尾随空格的触发器。为了设置它,我指定只有在列实际包含前导空格时才执行它:

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中的尾随空格?

默认情况下,如果未指定,触发器将创建为语句级触发器。但是,在
WHERE
子句中使用行列只能用于行级触发器

因此,触发器创建语句应该包含每行的
子句:

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

更多信息请参见文档。

。这是默认的。如果删除when子句,它将在不使用
'
Try
创建触发器的情况下工作。。。当…
它起作用时,每一行的rid上都有,谢谢。你可以写下这个作为答案。