Как создать быстрый триггер, который удаляет завершающие пробелы - PullRequest
0 голосов
/ 04 апреля 2020

Я попытался создать триггер, который удаляет завершающие пробелы. Чтобы ускорить его, я указал, что он должен выполняться только в том случае, если столбец действительно содержит начальный пробел:

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?

1 Ответ

1 голос
/ 04 апреля 2020

По умолчанию, если не указан, триггер создается как триггер уровня оператора. Однако использование столбцов строки в предложении 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 do c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...