在 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