创建一个在 UPDATE 上设置时间戳的触发器

Arn*_*iya 4 postgresql triggers

我有一个有 3 列的表。一条是一条记录,一条是created_time,最后一条是updated_at。我想创建一个存储过程,在更新记录时将 Updated_at 更改为 NOW()。每行还有一个 id,称为 id。我没有任何初始代码可以显示,因为我对触发器的工作原理有点困惑。我知道我的触发器将是更新或记录,但如何告诉表将其相应的 Updated_at 值更新为 NOW()。

我这样创建了我的表:

CREATE TABLE keyvalue ( 
  id id,
  record VARCHAR(128) UNIQUE,
  created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
  PRIMARY KEY(id)
);
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

Lau*_*lbe 5

您不更新表。相反,您可以编写一个BEFORE触发器,通过更改和返回变量来修改即将插入的行NEW

CREATE FUNCTION upd_trig() RETURNS trigger
   LANGUAGE plpgsql AS
$$BEGIN
   NEW.updated_at := current_timestamp;
   RETURN NEW;
END;$$;

CREATE TRIGGER upd_trig BEFORE UPDATE ON keyvalue
   FOR EACH ROW EXECUTE PROCEDURE upd_trig();
Run Code Online (Sandbox Code Playgroud)