为单字段更新postgres创建自动更新触发器



我有一个名为vehicle的表,就像这个

CREATE TABLE vehicle
(
id                  varchar,
status              TEXT,
created_at          TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at          TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)

);

我想创建一个触发器,该触发器只有在修改status值时才会打开触发器。

到目前为止,有一个触发器可以处理整个表字段,它是这样写的

第一个功能

CREATE OR REPLACE FUNCTION public.update_timestamp()
RETURNS trigger
LANGUAGE plpgsql
AS
$function$
BEGIN
NEW.status_updated_at = CURRENT_TIMESTAMP;
RETURN NEW;
END;
$function$
;

然后触发

create trigger update_timestamp
before update
on vehicle
for each row
execute procedure update_timestamp();

这个触发器的参考是https://x-team.com/blog/automatic-timestamps-with-postgresql/

只有当状态发生变化时,您才能更改触发器以执行触发器功能:

create trigger update_timestamp
before update
on vehicle
for each row
when (OLD.status IS DISTINCT FROM NEW.status)
execute procedure update_timestamp();

最新更新