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

目录
  • 什么是PostgreSQL时间戳数据类型?
  • 一、为什么
  • 二、如何做
  • 总结

什么是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自动更新时间戳内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • PostgreSQL更新表时时间戳不会自动更新的解决方法

    PostgreSQL更新表时时间戳不会自动更新的解决方法,具体如下 操作系统:CentOS7.3.1611_x64 PostgreSQL版本:9.6 问题描述 PostgreSQL执行Insert语句时,自动填入时间的功能可以在创建表时实现,但更新表时时间戳不会自动自动更新. 在mysql中可以在创建表时定义自动更新字段,比如 : create table ab ( id int, changetimestamp timestamp NOT NULL default CURRENT_TIMEST

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

    目录 什么是PostgreSQL时间戳数据类型? 一.为什么 二.如何做 总结 什么是PostgreSQL时间戳数据类型? 在PostgreSQL中,下一个数据类型是 TIMESTAMP ,它可以存储 TIME 和 DATE 值.但它不支持任何 时区数据.这意味着当我们转换数据库服务器的 时区时, 时间戳值将存储在数据库中,并且不能重复修改. 在PostgreSQL中,TIMESTAMP数据类型分为 两种时间数据类型,如下: timestamp timpstamptz Timestamp: :

  • Automapper实现自动映射的实例代码

    出于安全考虑,在后台与前台进行数据传输时,往往不会直接传输实体模型,而是使用Dto(Data transfer object 数据传输对象),这样在后台往前台传递数据时可以省略不必要的信息,只保留必要的信息,大大增强数据安全性. 下面给出两个相互对应的关系模型User.UserDto public class User { private const int NameMaxLength = 20; private const int PassWordMaxLength = 16; [Key] p

  • iOS UIScrollView滚动视图/无限循环滚动/自动滚动的实例代码

    我们都知道UIScrollView有一种很流畅的切换效果,结合UIPageControl的辅助展示效果,就可以完成一个很不错的产品介绍功能页面.下面给大家分享iOS UIScrollView滚动视图/无限循环滚动/自动滚动功能,具体代码如下所示: <UIScrollViewDelegate> #define WIDTH [[UIScreen mainScreen] bounds].size.width #define HEIGHT [[UIScreen mainScreen] bounds].

  • Mybatis结果集自动映射的实例代码

    在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType.这个时候其实就用到了Mybatis的结果集自动映射.Mybatis的自动映射默认是开启的,有需要我们也可以将其关闭(还可以调整自动映射的策略). 1       Mybatis结果集自动映射 在使用Mybatis时,有的时候我们可以不用定义resultMap,而是直接在<select>语句上指定resultType.这个时候其实就用到了Mybatis的结果集

  • python之matplotlib学习绘制动态更新图实例代码

    简介 通过定时器Timer触发事件,定时更新绘图,可以形成动态更新图片.下面的实例是学习<matplotlib for python developers>一文的笔记. 实现 实现代码及简单介绍 通过self.user = self.user[1:] + [temp],每次删除列表的第一元素,在其尾部添加新的元素.这样完成user数据的动态更新.其他详细的解释见文中的注释部分. #-*-coding:utf-8-*- import wx from matplotlib.figure impor

  • c语言同名标靶点自动匹配算法实现实例代码

    1.两个标靶数据 2.匹配结果 3.代码 #include <iostream> #include <vector> #include <math.h> using namespace std; struct Point { int id; float x,y,z; Point(int _id,float _x,float _y,float _z):id(_id),x(_x),y(_y),z(_z){} }; struct Triangle { Point p1,p2,

  • C# 模拟浏览器并自动操作的实例代码

    本文主要讲解通过WebBrowser控件打开浏览页面,并操作页面元素实现自动搜索功能,仅供学习分享使用,如有不足之处,还请指正. 涉及知识点 WebBrowser:用于在WinForm窗体中,模拟浏览器,打开并导航网页. HtmlDocument:表示一个Html文档的页面.每次加载都会是一个全新的页面. GetElementById(string id):通过ID或Name获取一个Html中的元素. HtmlElement:表示一个Html标签元素. BackgroundWorker 后台执行

  • android中强制更新app实例代码

    推荐第三种方式,简单快捷不卡. 第一种:jjdxm_update GitHub地址:jjdxmashl/jjdxm_update 效果图: 点击立即更新,程序会在后台下载,通知栏有下载进度.这个时候手机系统很卡,可能由于是下载app的原因吧.下载完成后弹出安装界面 简介: 这是大神jjdxmashl的开源项目,下载地址见上方.有版本更新.手动更新.静默更新.自动更新4种情况.应用内更新,实现类是友盟自动更新sdk的模式,用户使用前只需要配置自己的服务器更新检查接口即可(必须接口),也可以扩展加入

  • Android应用APP自动更新功能的代码实现

    由于Android项目开源所致,市面上出现了N多安卓软件市场.为了让我们开发的软件有更多的用户使用,我们需要向N多市场发布,软件升级后,我们也必须到安卓市场上进行更新,给我们增加了工作量.因此我们有必要给我们的Android应用增加自动更新的功能. 既然实现自动更新,我们首先必须让我们的应用知道是否存在新版本的软件,因此我们可以在自己的网站上放置配置文件,存放软件的版本信息: <update> <version>2</version> <name>baidu

  • C# Winform 自动更新程序实例详解

    本文实例为大家分享了C# Winform 自动更新程序,供大家参考,具体内容如下 第一步:检查更新 检查更新其实无非就是去比较更新包的版本和本地软件版本,如果高则更新.低则不更新.怎么获取版本号方法很多,本案例是获取软件的配置文件. private bool CheckUpdate() { bool result = false; try { string Cfg = TxtRead(exePath "\\Config.txt"); ConfigLocal = JsonConvert.

随机推荐