2017-08-25 58 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(),而不是这样的触发。唯一的情况下,你需要触发,如果你想它只在特定的修改触发