zoukankan      html  css  js  c++  java
  • PostgreSQL之时间戳自动更新

    操作系统 :CentOS7.3.1611_x64

    PostgreSQL版本 :9.6

    问题描述

    PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新。

    在mysql中可以在创建表时定义自动更新字段,比如 :

    create table ab (
      id int,
      changetimestamp timestamp
        NOT NULL
        default CURRENT_TIMESTAMP
        on update CURRENT_TIMESTAMP
    );

    那PostgreSQL中怎么操作呢?

    解决方案

    通过触发器实现,具体如下:

    create or replace function upd_timestamp() returns trigger as
    $$
    begin
        new.modified = current_timestamp;
        return new;
    end
    $$
    language plpgsql;
    
    drop table if exists ts;
    create table ts (
        id      bigserial  primary key,
        tradeid integer ,
        email varchar(50),
        num integer,
        modified timestamp default current_timestamp
    );
    create trigger t_name before update on ts for each row execute procedure upd_timestamp();

    测试代码:

    insert into ts (tradeid,email,num) values (1223,'mike_zhang@live.com',1);
    update ts set email='Mike_Zhang@live' where tradeid = 1223 ;
    
    create unique index ts_tradeid_idx on ts(tradeid);
    insert into ts(tradeid,email,num) values (1223,'Mike_Zhang@live.com',2) on conflict(tradeid) do update
    set email = excluded.email,num=excluded.num;
    
    select * from ts;
    -- delete from ts;

    注意: 以上代码在pgAdmin 4 v1客户端测试通过,使用DbVisualizer工具执行上述代码会报错。

    好,就这些了,希望对你有帮助。

    本文github地址:

    https://github.com/mike-zhang/mikeBlogEssays/blob/master/2017/20171013_PostgreSQL之时间戳自动更新.rst

    欢迎补充

  • 相关阅读:
    hdu2138(求素数)
    hdu2104
    poj1664(放苹果)
    数塔问题给你有哪些启示?
    汉诺塔问题(1)
    算法的力量(转李开复)
    最长子序列问题之系列一
    forward和redirect的区别
    group by 和having
    java中的多态三要素是什么?
  • 原文地址:https://www.cnblogs.com/MikeZhang/p/PostgreSQLRealte20171013.html
Copyright © 2011-2022 走看看