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

I created this trigger for a flight booking database where the trigger is meant to prevent reserved bookings from being deleted when using a delete sql statement. I have two statuses. One is 'r' for reserved and the other is 'c' for cancelled. My mission is to ensure that reserved bookings cannot be deleted and if a user tries to delete one, it raises the exception that's shown in my example trigger.

I have created this trigger and it has executed successfully but when I test it by deleting a reserved booking with status 'r' it runs and says "query returned successfully: one row affected..." which is not what I want. I want it to raise the exception and not delete the booking.

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();

解决方案

This line:

IF 'status' = 'r' THEN

...compares the string 'status' to the string 'r' (and of course, they're never going to be equal...).

Comparing the field status to the string 'r' would look like this:

IF OLD.status = 'r' THEN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值