我想爲我的一個db表的出生日期字段設置一個約束。基本上我想確保pat_dob_dt
至少在16年前(從當前日期起)。我使用PostgreSQL 20年4月8日和指導使用here:PostgreSQL觸發器/確保日期過去的函數
CREATE OR REPLACE FUNCTION patient_dob_in_past()
RETURNS TRIGGER AS $$
BEGIN
-- check pat_dob_dt is in past --
IF (NEW.pat_dob_dt > current_date - interval '16 years') THEN
RAISE EXCEPTION '% must be 16 years in past', NEW.pat_dob_dt
END IF;
RETURN NEW;
END;
$$ language 'plpgsql';
CREATE OR REPLACE TRIGGER patient_dob_in_past BEFORE UPDATE OR INSERT
ON patients FOR EACH ROW EXECUTE PROCEDURE patient_dob_in_past();
不幸的是,我遇到了以下錯誤
ERROR: syntax error at or near "END" at character 14
QUERY: SELECT $1 END IF
CONTEXT: SQL statement in PL/PgSQL function "patient_dob_in_past" near line 4
LINE 1: SELECT $1 END IF
不知道我要去的地方錯了,因爲我下面的PSQL文檔8.4
編輯 分號固定功能問題。我也得到一個錯誤對我觸發
ERROR: syntax error at or near "TRIGGER" at character 19 LINE 1: CREATE OR REPLACE TRIGGER patient_dob_in_past BEFORE UPDATE ...
錯誤盯着我。現在我的觸發器出現錯誤。我沒有考慮CHECK約束。我假設這會更快? – moadeep
是的 - 我認爲它會更快更整潔 –
不幸的是,我們的一些舊記錄已經違反了約束條件。需要一些時間來清理數據庫。用觸發器可能會更快。任何想法爲什麼我的觸發錯誤? – moadeep