在postgres中创建一个触发器

Alo*_*lon 1 sql database postgresql database-trigger pgadmin

我正在尝试通过pgadmin创建一个触发器,以便有一个计算列.

我需要这样做:c = a/b

我创建了一个函数UpdateC,它包含以下代码:

UPDATE table_name
SET c = a / b
WHERE id = @id
Run Code Online (Sandbox Code Playgroud)

我将@id声明为参数.

然后我想我会创建一个触发器并将它链接到该函数,但我发现我需要将它链接到触发器函数而不是函数.

现在我正在尝试使用与上面完全相同的SQL创建触发器函数,但是我收到了下一个错误:

"UPDATE"或其附近的语法错误

在定义选项卡下我必须选择一种语言,所以我选择了"plpgsql"(其他选项是"c"和"internal").

任何帮助将深表感谢!

Lau*_*lbe 6

您应该创建一个BEFORE触发器FOR EACH ROW而不是UPDATE表,但在写入之前更改该行.

有关详细信息,请参阅文档.

这是一个概念证明:

CREATE TABLE t (
   id integer PRIMARY KEY,
   a double precision,
   b double precision,
   c double precision
);

CREATE OR REPLACE FUNCTION t_trig() RETURNS trigger
   LANGUAGE plpgsql AS
$$BEGIN
   NEW.c = NEW.a / NEW.b;
   RETURN NEW;
END;$$;

CREATE TRIGGER t_trig BEFORE INSERT OR UPDATE ON t FOR EACH ROW
   EXECUTE PROCEDURE t_trig();

INSERT INTO t (id, a, b) VALUES (1, 42, 7);
INSERT 0 1
test=> SELECT * FROM t;
???????????????????
? id ? a  ? b ? c ?
???????????????????
?  1 ? 42 ? 7 ? 6 ?
???????????????????
(1 row)
Run Code Online (Sandbox Code Playgroud)