微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 触发错误:尚未分配录制“新”

我在 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

看到我只是执行一次程序,解决方案不适用于我的情况.

谢谢你的帮助!

解决方法

解决方案确实要添加FOR EACH ROW:

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

我假设FOR EACH ROW意味着为产品中的每一行调用一次过程,而不是为每行插入.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐