2017-08-25 60 views
2

我有一個名爲DTUpdated的帶有時區的timestamp類型的列。Postgress觸發器DateUpdated失敗

我創建了一個功能自動更新每次修改該列:

CREATE OR REPLACE FUNCTION public."RowModifiedFunction"() 
    RETURNS trigger AS $$ 

BEGIN 
    NEW.DTUpdated = clock_timestamp(); 
    RETURN NEW; 
END; 

,並觸發該表

CREATE TRIGGER "RowModifiedTrigger" 
    BEFORE UPDATE 
    ON public."Departments" 
    FOR EACH ROW 
    EXECUTE PROCEDURE public."RowModifiedFunction"(); 

申請,但是當我修改一個專欄中,我得到的錯誤:

"Record new has no field dtupdated" (in lowercase).

這裏有什麼問題?在此先感謝 Marcos

回答

2

Postgresql要求包含大寫的任何名稱的「這些引號」。

CREATE OR REPLACE FUNCTION public."RowModifiedFunction"() 
    RETURNS trigger AS $$ 

BEGIN 
    NEW."DTUpdated" = clock_timestamp(); 
    RETURN NEW; 
END; 
+0

感謝日誌Jasen,你救了我的一天。我從sqlserver來... – Marcos

+0

最好只是使用小寫的一切,那麼你不需要報價:) – Jasen

0

如果列是區分大小寫的,使用雙引號:

NEW."DTUpdated" = clock_timestamp(); 

注:通常默認值設置爲now(),而不是這樣的觸發。唯一的情況下,你需要觸發,如果你想它只在特定的修改觸發