Postgresql

現在之後的最後期限規則日期輸入

  • September 10, 2012

嗨,我正在嘗試找到一種方法來確保輸入的截止日期晚於目前時間和日期。目前我正在嘗試這個規則。

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())

謝謝

這是目前手冊在規則與觸發器中所說的內容:

如果需要檢查有效值,並且在無效值的情況下應生成錯誤消息,則必須由觸發器完成。

考慮在觸發器而不是規則中實施檢查。在您的情況下,觸發器是完成這項工作的完美工具。另一方面,眾所周知的事實是規則很敏感,而且更難掌握。

引用自:https://dba.stackexchange.com/questions/24031