跟踪Postgres中一行的最后修改时间戳

Dur*_*mlı 2 postgresql timestamp

在Postgres中,我想存储表的最后更新/插入时间。Microsoft SQL Server提供了一种timestamp由数据库自动维护的类型。

但是timestamp在Postgres中的工作原理有所不同,它不会自动更新,并且列始终为null。

Sof*_*enM 5

在postgresql中,您必须使用触发器。您可以按照以下链接操作:https://x-team.com/blog/automatic-timestamps-with-postgresql/

要总结本文,您可以执行以下操作:

  1. 创建将被触发的Pl / Pgsql函数:

    CREATE OR REPLACE FUNCTION trigger_set_timestamp()
    RETURNS TRIGGER AS $$
    BEGIN
      NEW.updated_at = NOW();
      RETURN NEW;
    END;
    $$ LANGUAGE plpgsql;
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建表格

    CREATE TABLE mytable (
      id SERIAL NOT NULL PRIMARY KEY,
      content TEXT,
      updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
    );
    
    Run Code Online (Sandbox Code Playgroud)
  3. 最后添加触发器:

    CREATE TRIGGER set_timestamp
    BEFORE UPDATE ON mytable
    FOR EACH ROW
    EXECUTE PROCEDURE trigger_set_timestamp();
    
    Run Code Online (Sandbox Code Playgroud)

您可以在此处找到有关该问题的更多信息:https : //dba.stackexchange.com/questions/58214/getting-last-modification-date-of-a-postgresql-database-table

希望对您有帮助。

  • `EXECUTE FUNCTION` 需要替换为 `EXECUTE PROCEDURE` (2认同)