纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

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

青Cheng序员石头   2021-11-24 我要评论
想了解PostgreSQL自动更新时间戳实例代码的相关内容吗青Cheng序员石头在本文为您仔细讲解PostgreSQL自动更新时间戳的相关知识和一些Code实例欢迎阅读和指正我们先划重点:postgresql自动更新时间戳,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行数据的时候执行这个触发器我们需要为每一个表设置应用这个触发器!至此达到目的

总结


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式