2017-05-07 133 views
0

我是postgresql中的新成員。我已經做了一個觸發器,在表中插入後啓用。我的表格有它的值,1個start_date的日期值和1個end_date的日期值。當我在表格中插入新行時,我想檢查是否與任何現有日期重疊。所以我的觸發如下:檢查postgresql中的返回查詢中是否存在值

CREATE OR REPLACE FUNCTION insert_new() 
RETURNS TRIGGER AS $$ 
BEGIN 
    if ('t' = any (select ((NEW.start_date, NEW.end_date) overlaps (start_date, end_date)) from "mytable")) then 
     RAISE EXCEPTION 'Invalid insertion!'; 
    else 
     return NEW; 
    end if; 
END; 
$$ LANGUAGE plpgsql; 

這似乎是正確的我,但是當我試圖在我的表中插入新行每次都遇到例外。我不明白爲什麼會發生..任何想法?在此先感謝..

下面是創建觸發器代碼:

CREATE TRIGGER check_insert 
AFTER INSERT ON "mytable" 
FOR EACH ROW 
WHEN (NEW.status = 'current') 
EXECUTE PROCEDURE insert_new(); 
+0

我不知道它是否會有所幫助,但這只是一個快速通知。檢查是否會有所幫助:''如果 'T'=任何(選擇((NEW.start_date,NEW.end_date)重疊來自 「MYTABLE」(開始日期,結束日期)))then'' – Sylogista

+0

這架看起來有點可疑,但我真的不知道。 – Sylogista

+0

@Sylogista我嘗試沒有支架,但我得到了相同的結果.. –

回答

0
CREATE TRIGGER check_insert 
BEFORE INSERT ON "mytable" 
FOR EACH ROW 
WHEN (NEW.status = 'current') 
EXECUTE PROCEDURE insert_new(); 

你有AFTER INSERT檢查,跌落觸發,然後用BEFORE代替AFTER創建並再次嘗試插入