Postgres触发DateUpdated失败

时间:2017-08-25 10:25:15

标签: postgresql

我有一个名为DTUpdated的列,其类型为timestamp,带有时区。

我创建了一个函数,可以在每次修改时自动更新该列:

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

但是当我修改一列时,我得到错误:

  

"记录新的没有字段dtupdated" (小写)。

2 个答案:

答案 0 :(得分:2)

Postgresql需要"这些引号"在包含大写的任何名称上。

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

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

答案 1 :(得分:0)

如果列是区分大小写的,请使用双引号:

NEW."DTUpdated" = clock_timestamp();  

注意:通常将默认值设置为now()而不是此类触发器。如果您希望仅在特定修改时触发,则需要触发的唯一情况