我想为我的一个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