gpt4 book ai didi

sql - 在 postgres 中创建触发器

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:51 25 4
gpt4 key购买 nike

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

我需要做的:c = a/b

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

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

然后我将@id 声明为参数。

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

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

syntax error at or near "UPDATE"

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

任何帮助将不胜感激!

最佳答案

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

参见 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)

关于sql - 在 postgres 中创建触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39723436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com