0
我有一個功能,如下觸發:PostgreSQL觸發不點火
CREATE FUNCTION update() RETURNS TRIGGER AS $logupdate$
DECLARE
judge boolean;
BEGIN
judge := EXECUTE ('SELECT starttime,endtime,NEW.starttime,NEW.endtime FROM reserves WHERE bid = NEW.bid AND startdate = NEW.startdate AND (starttime,endtime) overlaps(NEW.starttime,NEW.endtime) IS NULL');
IF judge = f THEN RETURN false;
END IF;
RETURN NEW;
END;
$logupdate$ LANGUAGE plpgsql;
CREATE TRIGGER logupdate
before UPDATE ON reserves
FOR EACH ROW
EXECUTE PROCEDURE update();
,如果有一個古老的時間在我的表中的觸發器應檢測是否新的輸入已與以前的時間重疊,例如[ 11:00 - 13:00],新的輸入是[12:00 - 14:00],那麼觸發器應該觸發並停止插入。 但是,它不能在我的電腦上工作,這裏有什麼問題?
THX徵求意見工作,但是我得到以下「ERROR:記錄‘老’尚未分配」有沒有辦法來解決這個問題? –
哦,對不起。 OLD實際上沒有定義,因爲它是'BEFORE UPDATE'觸發器。我的錯。如果您只想在更新上執行此操作,並且只關心更新是否與之前的值重疊,則可能需要將其更改爲AFTER更新,並在發生故障時引發異常。否則,我真的只是使用排除約束http://stackoverflow.com/questions/10616099/postgres-date-overlapping-constraint – Falmarri