PostgreSQL自动更新时间戳实例代码


Posted in PostgreSQL onNovember 27, 2021

什么是PostgreSQL时间戳数据类型?

在PostgreSQL中,下一个数据类型是 TIMESTAMP ,它可以存储 TIME 和 DATE 值。但它不支持任何 时区数据。这意味着当我们转换数据库服务器的 时区时, 时间戳值将存储在数据库中,并且不能重复修改。

在PostgreSQL中,TIMESTAMP数据类型分为 两种时间数据类型,如下:

  • timestamp
  • timpstamptz

Timestamp: : 使用时间戳数据类型 ,不带时区。

Timestamptz: : timestamptz数据类型用于带有时区的 。

注意:

  • timestamptz数据类型是与时区相关的日期和时间数据类型,并且是具有时区的时间戳。
  • 时间戳和时间戳存储时间戳值的 8字节存储,如以下命令所示:
SELECT typname, typlen
FROM pg_type
WHERE typname ~ '^timestamp';

最近一段时间公司有一些入职的实习生在使用PostgreSQL创建表Schema时,对创建时间create_at和更新时间update_at字段自动更新时间戳不是很清楚。记录这篇文章,让后面来的实习生和新同事有一个参考。

一、为什么

在讲如何更新时间戳之前,我们还是要了解为何有必要自动更新时间戳。对于很多业务表,我们大多数需要记录以下几个字段:

  • create_at 创建时间
  • update_at 更新时间
  • create_by 创建人
  • update_by 更新人

为了给这些字段赋值,我们需要在repository层为entity赋值,创建时间和更新时间就取当前系统时间LocalDateTime,创建人和更新人需要用系统用户去赋值。对于创建时间和更新时间,这种与当前业务无关的字段,有没有可能不在repository上每次去手动赋值。

当然,肯定是有的,创建时间无非就是数据新插入行的时间,更新时间就是行数据更新的时间,理解了这一层的含义,那就有解决办法了。

对于Mysql来说,其内部提供的函数对于创建时间和更新时间的字段的自动更新是相当容易的,但对于PostgreSQL事情会稍稍复杂一点。

二、如何做

要在插入数据的时候自动填充 create_at列的值,我们可以使用DEFAULT值,如下面所示。

CREATE TABLE users (
  ...
  create_at timestamp(6) default current_timestamp
)

为create_at字段设置一个默认值current_timestamp当前时间戳,这样达到了通过在 INSERT 语句中提供值来显式地覆盖该列的值。

但上面的这种方式只是对于insert行数据的时候管用,如果对行更新的时候,我们需要使用到数据库的触发器trigger。

首先我们编写一个触发器update_modified_column如下面的代码所示,含义是更新表的字段update_at为当前时间戳。

CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_at = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

然后我们应用这个触发器,如何应用呢?当然是为这个触发器设置触发条件。

CREATE TRIGGER update_table_name_update_at BEFORE UPDATE ON table_name FOR EACH ROW EXECUTE PROCEDURE  update_modified_column();

即代表的含义是更新表table_name行数据的时候,执行这个触发器,我们需要为每一个表设置应用这个触发器!至此,达到目的。

总结

到此这篇关于PostgreSQL自动更新时间戳的文章就介绍到这了,更多相关PostgreSQL自动更新时间戳内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

PostgreSQL 相关文章推荐
postgresql无序uuid性能测试及对数据库的影响
Jun 11 PostgreSQL
postgres之jsonb属性的使用操作
Jun 23 PostgreSQL
PostgreSQL解析URL的方法
Aug 02 PostgreSQL
使用PostGIS完成两点间的河流轨迹及流经长度的计算(推荐)
Jan 18 PostgreSQL
Rust 连接 PostgreSQL 数据库的详细过程
Jan 22 PostgreSQL
Oracle配置dblink访问PostgreSQL的操作方法
Mar 21 PostgreSQL
PostgreSQL 插入INSERT、删除DELETE、更新UPDATE、事务transaction
Apr 12 PostgreSQL
PostgreSQL聚合函数介绍以及分组和排序
Apr 12 PostgreSQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
Apr 12 PostgreSQL
PostgreSQL怎么创建分区表详解
Jun 25 PostgreSQL
postgresql中如何执行sql文件
May 08 PostgreSQL
关于PostgreSQL JSONB的匹配和交集问题
Sep 14 #PostgreSQL
postgresql 删除重复数据案例详解
Aug 02 #PostgreSQL
PostgreSQL解析URL的方法
Aug 02 #PostgreSQL
postgresql使用filter进行多维度聚合的解决方法
Jul 16 #PostgreSQL
浅谈PostgreSQL表分区的三种方式
通过Qt连接OpenGauss数据库的详细教程
postgres之jsonb属性的使用操作
Jun 23 #PostgreSQL
You might like
php代码优化及php相关问题总结
2006/10/09 PHP
用PHP书写安全的脚本代码
2012/02/05 PHP
PHP文件上传问题汇总(文件大小检测、大文件上传处理)
2015/12/24 PHP
使用PHP连接多种数据库的实现代码(mysql,access,sqlserver,Oracle)
2016/12/21 PHP
javascript cookies 设置、读取、删除实例代码
2010/04/12 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JS面向对象(3)之Object类,静态属性,闭包,私有属性, call和apply的使用,继承的三种实现方法
2016/02/25 Javascript
前端构建工具之gulp的语法教程
2017/06/12 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
koa router 多文件引入的方法示例
2019/05/22 Javascript
javascript实现打砖块小游戏(附完整源码)
2020/09/18 Javascript
vue-quill-editor插入图片路径太长问题解决方法
2021/01/08 Vue.js
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
[52:06]FNATIC vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
基于python编写的微博应用
2014/10/17 Python
Django框架中处理URLconf中特定的URL的方法
2015/07/20 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
Python从单元素字典中获取key和value的实例
2018/12/31 Python
Python实现通过解析域名获取ip地址的方法分析
2019/05/17 Python
python判断字符串以什么结尾的实例方法
2020/09/18 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
捷克体育用品购物网站:D-sport
2017/12/28 全球购物
巴基斯坦购物网站:Goto
2019/03/11 全球购物
Saks Fifth Avenue澳洲/亚太地区:萨克斯第五大道精品百货店
2019/06/09 全球购物
荷兰在线啤酒店:Beerwulf
2019/08/26 全球购物
澳大利亚宠物食品和用品商店:PETstock
2020/01/02 全球购物
温泉秘密:Onsen Secret
2020/07/06 全球购物
C语言面试题
2015/10/30 面试题
求职简历自荐信范文
2013/10/21 职场文书
好的自荐信的要求
2013/10/30 职场文书
冰淇淋开店创业计划书
2014/02/01 职场文书
公司建议书怎么写
2014/05/15 职场文书
专业见习报告范文
2014/11/03 职场文书
springboot创建的web项目整合Quartz框架的项目实践
2022/06/21 Java/Android