【问题标题】:PostgreSQL: how to fetch previous insert timestampPostgreSQL:如何获取先前的插入时间戳
【发布时间】:2012-05-24 04:34:08
【问题描述】:

假设我有桌子

create table foo (
    insert_current timestamp default now(),
    insert_previous timestamp,
    bar int primary key,
    baz varchar(10)
);

数据将在新批次到达时不时被替换。我想跟踪上一批插入的时间以及当前时间戳。有什么好的方法可以做到这一点?

【问题讨论】:

    标签: postgresql timestamp


    【解决方案1】:

    我将创建一个触发器,在 UPDATE 语句中自动设置 insert_current 和 insert_previous。

    首先,创建触发函数:

    CREATE OR REPLACE FUNCTION do_update() RETURNS "trigger"
    AS $$
    BEGIN
        NEW.insert_previous := OLD.insert_current;
        NEW.insert_current := NOW();
        return NEW;
    END;
    $$
    LANGUAGE plpgsql;
    

    然后将触发器添加到您的表中:

    CREATE TRIGGER do_update
    BEFORE UPDATE ON foo
    FOR EACH ROW
    EXECUTE PROCEDURE do_update();
    

    【讨论】:

    • 谢谢,我需要的是触发器。
    【解决方案2】:

    更新一行时,将insert_current 的值复制到insert_previous 并将insert_current 设置为当前时间戳:

    UPDATE foo
       SET baz = 'whatever',
           insert_previous = insert_current,
           insert_current  = NOW()
     WHERE bar = 1;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-21
      • 1970-01-01
      • 1970-01-01
      • 2013-11-06
      • 2011-02-16
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多