删除预防触发器不起作用 - postgresql

时间:2017-04-10 14:49:32

标签: postgresql triggers

我为航班预订数据库创建了此触发器,其中触发器用于防止在使用delete sql语句时删除保留的预订。我有两种状态。一个是' r'保留,另一个是' c'取消。我的任务是确保无法删除预订的预订,如果用户试图删除预订,则会引发我的示例触发器中显示的异常。

我创建了这个触发器并且已经成功执行但是当我通过删除状态为' r'的预订预订来测试它时。它运行并说"查询成功返回:一行受影响......"这不是我想要的。我希望它提出异常而不是删除预订。

CREATE FUNCTION prevent_deletion() RETURNS trigger AS $prevent_deletion$

        BEGIN            
            IF 'status' = 'r' THEN
                RAISE EXCEPTION 'You cannot delete reserved bookings';
            END IF;
            RETURN NEW;

        END;
    $prevent_deletion$ LANGUAGE plpgsql;

    CREATE TRIGGER prevent_deletion AFTER DELETE ON flightbooking
        FOR EACH ROW EXECUTE PROCEDURE prevent_deletion();

1 个答案:

答案 0 :(得分:1)

这一行:

IF 'status' = 'r' THEN

...将字符串'status'与字符串'r'进行比较(当然,它们永远不会相等......)。

字段 status与字符串'r'进行比较,如下所示:

IF OLD.status = 'r' THEN