如何创建删除尾随空格的快速触发器
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 文档中有更多内容。
我试图创建删除尾随 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 文档中有更多内容。