在 postgres 中创建触发器

Creating a trigger in postgres

我正在尝试通过 pgadmin 创建一个触发器以获得计算列。

我需要做:c = a / b

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

UPDATE table_name
SET c = a / b
WHERE id = @id

并且我将@id 声明为参数。

然后我想我会创建一个触发器并将它 link 到那个函数,但我发现我需要 link 它到一个触发器函数而不是一个函数。

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

syntax error at or near "UPDATE"

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

任何帮助将不胜感激!

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

详情见the doocumentation

这是一个概念证明:

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)