我有創造的psql功能的問題,這是插入或更新表中的行之前被稱爲觸發:「性能」這specyfic音樂節期間舉行音樂表演。PLPGSQL的功能:檢查用戶是否插入唯一的時間範圍爲表
我想acomplish是該函數將檢查是否新的性能beg_date日期和結束日期將不會與現有的表演碰撞。限制是在給定的音樂節中只能有一次演出。
表 '性能' 的結構如下:
id
beg_date : timestamp
end_date : timestamp
artist_id
music_concert_id
而且Music_Festivals:
id
beg_date : timestamp
end_date : timestamp
name
我的功能看起來像這樣:
CREATE OR REPLACE FUNCTION check_valid_performance_date() RETURNS TRIGGER AS $check_date$
BEGIN
IF EXISTS (SELECT * from wystep) THEN
IF EXISTS (SELECT 1 FROM wystep WHERE beg_date > NEW.beg_date AND beg_date < NEW.end_date AND id_music_festival = NEW.id_music_festival LIMIT 1) THEN
RAISE EXCEPTION 'exception 1';
ELSIF EXISTS (SELECT 1 FROM wystep WHERE beg_date < NEW.beg_date AND end_date > NEW.beg_date AND id_music_festival = NEW.id_music_festival LIMIT 1) THEN
RAISE EXCEPTION 'exception 2 ';
ELSIF EXISTS (SELECT 1 FROM wystep WHERE beg_date <= NEW.beg_date AND NEW.end_date <= end_date AND id_music_festival = NEW.id_music_festival LIMIT 1) THEN
RAISE EXCEPTION 'exception 3 ';
END IF;
END IF;
RETURN NEW;
END
$check_date$ LANGUAGE plpgsql;
我的觸發器:
CREATE TRIGGER check_valid_performance
AFTER INSERT OR UPDATE OR DELETE ON Performance
FOR EACH ROW EXECUTE PROCEDURE check_valid_performance_date();
但我得到'異常3',即使我從空表開始。這個功能有什麼問題?
看在9.2新範圍類型作爲由Falmarri提到與排除的約束相結合。 http://www.depesz.com/2011/11/07/waiting-for-9-2-range-data-types/ –