为什么这个触发器不起作用?

时间:2016-05-24 10:17:06

标签: database postgresql triggers

我有一个简单的postgreSQL表

Flight (id, pilot, copilot)

我希望添加一个触发器,以避免创建具有pilot =副驾驶的记录,因为当然只有一个人可以同时执行这两项操作:D

我试过了:

CREATE FUNCTION controllaPiloti() RETURNS TRIGGER AS $$
BEGIN
IF (SELECT pilot FROM flight WHERE pilot = new.pilot AND copilot = new.pilot)
THEN RAISE EXCEPTION 'Pilot and copilot must be different!';
END IF;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
CREATE TRIGGER checkPiloti
BEFORE INSERT ON flight FOR EACH ROW
EXECUTE PROCEDURE controllaPiloti();

但它不起作用。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我自己刚刚解决了这个问题,没关系。

这是正确的触发器

CREATE FUNCTION controllaPiloti() RETURNS TRIGGER AS $$
BEGIN
IF (new.comandante = new.vice)
THEN RAISE EXCEPTION 'Comandante e vice non possono coincidere!';
END IF;
RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';
CREATE TRIGGER checkPiloti
BEFORE INSERT ON viaggio FOR EACH ROW
EXECUTE PROCEDURE controllaPiloti();

像魅力一样。