您好我正在尝试找到一种方法来确保输入的截止日期晚于当前时间和日期。目前我正在尝试使用规则。
CREATE OR REPLACE RULE "DeadlineInput" AS
ON INSERT TO "ComLog"
WHERE new."Deadline" < now() DO INSTEAD SELECT "ThrowError"('New deadline must be after current time'::bpchar) AS "ThrowError";
COMMENT ON RULE "DeadlineInput" ON "ComLog" IS 'Ensures deadline input is after the current time.';
我正在使用一个单独的函数来尝试抛出错误,因为当我尝试在规则内执行它时,由于语言错误而失败。以下是我的功能。
-- Function: "ThrowError"(character)
-- DROP FUNCTION "ThrowError"(character);
CREATE OR REPLACE FUNCTION "ThrowError"("ErrorString" text)
RETURNS void AS
$BODY$
BEGIN
RAISE EXCEPTION '%', "ErrorString";
END;
$BODY$
LANGUAGE plpgsql IMMUTABLE
COST 100;
ALTER FUNCTION "ThrowError"(character)
OWNER TO reuben;
无论日期如何,这总是会产生错误消息,我不知道为什么。作为附带问题,有没有办法让传递给我的函数的字符串包含当前时间。就像是"ThrowError"('New deadline must be after current time %' now())
谢谢
以下是当前手册在Rules Versus Triggers中所说的内容:
考虑在触发器而不是规则中实施检查。触发器是完成您的工作的完美工具。另一方面,众所周知,规则是敏感的并且更难掌握。