PostgreSQL之时间戳自动更新

问题描述

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

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

create table ab (

id int,

age int,

changetimestamp timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP

);

那PostgreSQL中怎么操作呢?

解决方案

1,通过内置的插件包moddatetime实现

create extension moddatetime;

drop table if exists t1;

create table t1 (

id     serial  not null primary key,

age int,

create_time timestamp(0) without time zone default now()::timestamp(0) without time zone,

update_time timestamp(0) without time zone

);

-- 自动将update_time字段更新为最新时间

CREATE TRIGGER update_timestamp

BEFORE UPDATE ON t1

FOR EACH ROW

EXECUTE PROCEDURE moddatetime (update_time);

--测试

insert into t1 (age) values (1),(2),(3);

update t1 set age=4 where id = 1;

update t1 set age=5 where id = 2;

update t1 set age=6 where id = 3;

select * from t1;

id | age |     create_time     |        update_time

----+-----+---------------------+----------------------------

1 |   4 | 2019-11-05 12:00:50 | 2019-11-05 12:00:50.048446

2 |   5 | 2019-11-05 12:00:50 | 2019-11-05 12:00:50.050179

3 |   6 | 2019-11-05 12:00:50 | 2019-11-05 12:00:50.05179

方案2,触发器实现

drop table if exists t1;

create table t1 (

id     serial  not null primary key,

age int,

create_time timestamp(0) without time zone default now()::timestamp(0) without time zone,

update_time timestamp(0) without time zone

);

create or replace function update_timestamp() returns trigger as

$$

begin

new.update_time = current_timestamp;

return new;

end

$$

language plpgsql;

create trigger t_update_time before update on t1 for each row execute procedure update_timestamp();

测试

-- 自动将update_time字段更新为最新时间

CREATE TRIGGER update_timestamp

BEFORE UPDATE ON t1

FOR EACH ROW

EXECUTE PROCEDURE moddatetime (update_time);

--测试

insert into t1 (age) values (1),(2),(3);

update t1 set age=4 where id = 1;

update t1 set age=5 where id = 2;

update t1 set age=6 where id = 3;

select * from t1;

id | age |     create_time     |     update_time

----+-----+---------------------+---------------------

1 |   4 | 2019-11-05 12:04:42 | 2019-11-05 12:04:42

2 |   5 | 2019-11-05 12:04:42 | 2019-11-05 12:04:42

3 |   6 | 2019-11-05 12:04:42 | 2019-11-05 12:04:42

(3 rows)

各种数据库迁移到PostgreSQL及PG维保、商业培训、紧急救援及其他服务,请扫码联系。

PostgreSQL之时间戳自动更新相关推荐

  1. php更新数据库时间戳,关于Thinkphp5 里面数据库自动更新与创建时间的问题

    我们有时候往数据库里面写入新的一条数据 时,可能需要自动更新时间.自动创建时间.这样就可以方便我们.从而大大减小我们的代码量: 不过在TP5里面有一个小规律,就是save()与insert()语句的区 ...

  2. MySQL自动更新当前时间戳

    1. 问题 碰到一个奇怪的问题,一个业务表当更新了其中几行后,这几行对应的列created_at(DATETIME)自动更新为当前时间. 2. 排查 第一感觉想到触发器,排查表并未有触发器. 打开表设 ...

  3. mysql更新时间戳_MySQL timestamp自动更新时间分享

    通常表中会有一个Create date 创建日期的字段,其它数据库均有默认值的选项.MySQL也有默认值timestamp,但在MySQL中,不仅是插入就算是修改也会更新timestamp的值! 这样 ...

  4. mysql timestamp 转型_MySQL的timestamp类型自动更新问题【转】

    今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...

  5. mysql timestamp 自动更新_mysql timestamp自动更新

    最近遇到timestamp的自动更新时间问题,记录如下: 先看mysql官方手册(翻译稿): 在CREATE TABLE语句中,可以用下面的任何一种方式声明第1个TIMESTAMP列: 1.用DEFA ...

  6. MySQL的timestamp类型自动更新问题

    今天建了一个表,里面有一个列是timestamp类型,我本意是在数据更新时,这个字段的时间能自动更新.岂知对这个类型的值还不甚了解,导致出错.发现这个字段只是在这行数据建立的时候有值,在更新的却无变化 ...

  7. postgresql 重启记录_PostgreSQL 高可用:PostgreSQL复制和自动故障转移

    原文:PostgreSQL Replication and Automatic Failover Tutorial[1] 作者:Abbas Butt 翻译整理:alitrack 1.什么是 Postg ...

  8. html时间框自动更新,原生javascript实现自动更新的时间日期

    能够动态变化的事物总比静态的更能够吸引人,甚至更有实用效果,比如能够自动变化的时间日期效果就是如此,下面就通过代码实例介绍一下如何实现此效果,代码实例如下: 一.具体代码 脚本之家 var t = n ...

  9. html日期自动更新,原生javascript实现自动更新的时间日期_javascript技巧

    能够动态变化的事物总比静态的更能够吸引人,甚至更有实用效果,比如能够自动变化的时间日期效果就是如此,下面就通过代码实例介绍一下如何实现此效果,代码实例如下: 一.具体代码 脚本之家 以上代码实现了我们 ...

最新文章

  1. Possible MySQL server UUID duplication for server
  2. php 7月世界排名2017,TIOBE2017榜单公布,PHP还会是世界上最好的语言吗?
  3. 驱动程序实例(四):按键驱动程序(platform + input子系统 + 外部中断方式)
  4. python量化数据处理小细节2
  5. mysql 执行计划 视频_MySQL执行计划的讲解
  6. Mysql:日志管理:错误日志
  7. c# timer 销毁_C# task和timer实现定时操作
  8. cortex a7 a53_最美轿跑之一的奥迪A7,究竟有何魅力令人一眼定心
  9. BZOJ1123: [POI2008]BLO
  10. 学好英语网html首页制作,首页英语
  11. c语言编程温度转换源,c语言编程,将华氏温度转换成摄氏温度。转换公式为:c=5/9 * (f-32),其中f代表华氏温度...
  12. 南师大GIS考研数据库2013年第四题
  13. Kubernetes Deployment故障排除图解指南
  14. 蓝牙、红外线与wifi 区别以及不同频段无线电磁波的穿墙和绕过障碍物能力
  15. c语言实践输出某个区间中不是3的倍数的偶数
  16. 0033__PDM,全称为 Persepolis Download Manager
  17. 首款国产8K 50P小型化广播级摄像机惊喜亮相冬季冰雪体育盛会
  18. IllegalStateException: Errors/BindingResult argument declared without preceding model attribute. Che
  19. 【Python】python 程序示例
  20. Pycharm中 No module ‘自定义模块‘ 的问题(mmrotate)

热门文章

  1. xlsx.core.min.js读取excel文件数据(无乱码,测试通过)
  2. 将计算机与局域网互连学,局域网互连
  3. 2022广东春运指南:让回家的路更顺畅一些
  4. C、C++、Java、JavaScript、PHP、Python和Ruby,主要有什么区别?
  5. 社群管理工具以及新媒体运营工具清单,记得收藏!
  6. VS Code打开vue文件出现很多黄色波浪线的解决办法(ESlint插件引起)
  7. 【Vijos P1052】 贾老二算算术 高斯消元傻题
  8. (附源码)计算机毕业设计SSM流浪猫狗救助站
  9. 为什么会出现“烫烫烫”和“屯屯屯”?
  10. 烫烫烫”和“屯屯屯”