在PostgreSQL中更新行时更新时间戳

bic*_*e74 66 postgresql timestamp

在MySQL中,我们可以在changetimestamp每次更改行时更新列时执行此操作:

create table ab (
  id int, 
  changetimestamp timestamp 
    NOT NULL 
    default CURRENT_TIMESTAMP 
    on update CURRENT_TIMESTAMP 
);
Run Code Online (Sandbox Code Playgroud)

在PostgreSQL中有类似的东西吗?

Cha*_* Ma 108

创建一个更新表的changetimestamp列的函数,如下所示:

CREATE OR REPLACE FUNCTION update_changetimestamp_column()
RETURNS TRIGGER AS $$
BEGIN
   NEW.changetimestamp = now(); 
   RETURN NEW;
END;
$$ language 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

每当发生更新时,在表上创建一个调用update_changetimestamp_column()函数的触发器:

    CREATE TRIGGER update_ab_changetimestamp BEFORE UPDATE
    ON ab FOR EACH ROW EXECUTE PROCEDURE 
    update_changetimestamp_column();
Run Code Online (Sandbox Code Playgroud)

  • @womble发布一个这样的例子可能会非常有用.如果我管理如何动态指定要更新的列,我会将其写为答案. (6认同)
  • 有没有办法将需要更新的列名称作为参数更新到函数`update_changetimestamp_column`? (4认同)
  • 那么,除了通过触发器之外,没有其他方法可以做我想做的事吗?因为我想为我所有可能超过 300 的表实现“更新时间戳”。而且我认为创建触发器可能会导致一些性能问题。 (3认同)
  • 据我所知,这是在postgresql中执行此操作的标准方法.当您在mysql中编写"on update current_timestamp"时,它会在后台的表上创建一个触发器.不同之处在于您手动编写触发器而不是为您编写触发器. (3认同)
  • 实际上没有性能损失 - 至少在任何合理的数据库中都是如此. (3认同)