在 Postgres 中创建触发器请求 avg()
Create Trigger in Postgres asking for avg()
我正在尝试创建一个触发器,在每次插入 table A 后,将 table A 中一列的平均值添加到 table B 中。
Table A(id(整数),评分(整数))
TableB(id(序列号),average(整数))
我的触发器是:
CREATE TRIGGER rat_trig
AFTER INSERT ON a
FOR EACH ROW EXECUTE PROCEDURE upd_rat_func();
我的触发函数如下所示:
CREATE OR REPLACE FUNCTION upd_rat_func() RETURNS TRIGGER as $rating_update$
BEGIN
INSERT INTO b VALUES (DEFAULT, AVG(rating) FROM a);
RETURN NEW;
END;
$rating_update$ language plpgsql;
Postgres 告诉我我的函数在 'from' 附近或附近的某个地方有错误,但我找不到使它工作的方法(触发器尚未创建,因为我无法创建该函数) .非常欢迎任何帮助(或者关于我在哪里可以找到更多关于触发器函数结构的建议,因为 postgres 文档没有帮助)。
这是 PostgreSQL 文档:
https://www.postgresql.org/docs/12/plpgsql-trigger.html
尝试像这样更改 smth 的 INSERT 语句:
INSERT INTO b (average) SELECT AVG(rating) FROM a;
在将其添加到触发函数之前确保它可以正常工作
FROM
必须属于 SELECT
(或 DELETE
)。
要使用子查询,请使用完整的查询并将其放入括号中:
INSERT INTO b VALUES (DEFAULT, (SELECT AVG(rating) FROM a));
但是那个触发器对我来说意义不大。您想要一个新行,每个 INSERT
都有一个新的平均值? b
中的其他行呢?
也许您正在寻找 materialized view。
我正在尝试创建一个触发器,在每次插入 table A 后,将 table A 中一列的平均值添加到 table B 中。
Table A(id(整数),评分(整数))
TableB(id(序列号),average(整数))
我的触发器是:
CREATE TRIGGER rat_trig
AFTER INSERT ON a
FOR EACH ROW EXECUTE PROCEDURE upd_rat_func();
我的触发函数如下所示:
CREATE OR REPLACE FUNCTION upd_rat_func() RETURNS TRIGGER as $rating_update$
BEGIN
INSERT INTO b VALUES (DEFAULT, AVG(rating) FROM a);
RETURN NEW;
END;
$rating_update$ language plpgsql;
Postgres 告诉我我的函数在 'from' 附近或附近的某个地方有错误,但我找不到使它工作的方法(触发器尚未创建,因为我无法创建该函数) .非常欢迎任何帮助(或者关于我在哪里可以找到更多关于触发器函数结构的建议,因为 postgres 文档没有帮助)。
这是 PostgreSQL 文档:
https://www.postgresql.org/docs/12/plpgsql-trigger.html
尝试像这样更改 smth 的 INSERT 语句:
INSERT INTO b (average) SELECT AVG(rating) FROM a;
在将其添加到触发函数之前确保它可以正常工作
FROM
必须属于 SELECT
(或 DELETE
)。
要使用子查询,请使用完整的查询并将其放入括号中:
INSERT INTO b VALUES (DEFAULT, (SELECT AVG(rating) FROM a));
但是那个触发器对我来说意义不大。您想要一个新行,每个 INSERT
都有一个新的平均值? b
中的其他行呢?
也许您正在寻找 materialized view。