触发器错误:尚未分配记录"new"



我在postgresql中有以下代码:

CREATE OR REPLACE FUNCTION update_category() RETURNS trigger AS $newProduct$
BEGIN
    UPDATE category SET product_count = product_count + 1 WHERE cat_id = NEW.cat_id;
    INSERT INTO notification (content, type, p_id) VALUES('new product', 1, NEW.p_id);
    RETURN NEW;
END;
$newProduct$ LANGUAGE plpgsql;
CREATE TRIGGER update_cat AFTER INSERT ON product
    EXECUTE PROCEDURE update_category();

记录插入产品后,出现错误:

[2017-03-20 16:05:05] [55000] ERROR: record "new" is not assigned yet
[2017-03-20 16:05:05] Detail: The tuple structure of a not-yet-assigned record is indeterminate.
[2017-03-20 16:05:05] Where: SQL statement "UPDATE category SET product_count = product_count + 1 WHERE cat_id = NEW.cat_id"
[2017-03-20 16:05:05] PL/pgSQL function update_category() line 3 at SQL statement

我已经四处寻找解决方案,但我只发现错误的情况是因为

FOR EACH STATEMENT

正在使用而不是

FOR EACH ROW

看到我只是执行一次该过程,因此解决方案不适用于我的情况。

感谢您的帮助!

解决方案确实是添加 对于每一行:

CREATE TRIGGER update_cat AFTER INSERT ON product
    FOR EACH ROW EXECUTE PROCEDURE update_category();

我假设"对于每一行"意味着对产品中的每一行调用一次该过程,而不是为插入的每一行调用该过程。

最新更新