触发器不工作,不显示任何错误

Trigger doesn't work and doesn't show any errors

我正在尝试创建一个触发器,将姓名和中间名缩短为首字母。 这就是我所拥有的:

CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
DECLARE nm VARCHAR(50);
DECLARE mdnm VARCHAR(50);
BEGIN
   nm = LEFT(NEW.name, 1);
   mdnm = LEFT(NEW.middle_name, 1);
   SET NEW.name = nm;
   SET NEW.middle_name = mdnm;
   RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER table_before_insert BEFORE INSERT OR UPDATE ON table1
FOR EACH ROW EXECUTE PROCEDURE myfunc();

但由于某些原因它不起作用,它会是什么?

因为 documented in the manual 变量被分配 :==。但不能使用 SET 命令 - 它会更改配置属性。您也不需要为每个变量单独声明块:

所以你的触发函数应该是这样的:

CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
DECLARE 
   nm VARCHAR(50);
   mdnm VARCHAR(50);
BEGIN
   nm := LEFT(NEW.name, 1);
   mdnm := LEFT(NEW.middle_name, 1);
   NEW.name := nm;
   NEW.middle_name := mdnm;
   RETURN NEW;
END;
$$ LANGUAGE plpgsql;

你甚至不需要变量:

CREATE OR REPLACE FUNCTION myfunc() RETURNS TRIGGER AS $$
BEGIN
   NEW.name := LEFT(NEW.name, 1);
   NEW.middle_name := LEFT(NEW.middle_name, 1);
   RETURN NEW;
END;
$$ LANGUAGE plpgsql;