千家信息网

PostgreSQL如何实现自动更新时间戳

发表于:2024-09-26 作者:千家信息网编辑
千家信息网最后更新 2024年09月26日,这篇文章主要介绍PostgreSQL如何实现自动更新时间戳,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!什么是PostgreSQL时间戳数据类型?在PostgreSQL中,下一
千家信息网最后更新 2024年09月26日PostgreSQL如何实现自动更新时间戳

这篇文章主要介绍PostgreSQL如何实现自动更新时间戳,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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

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

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

  • timestamp

  • timpstamptz

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

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

注意:

  • timestamptz数据类型是与时区相关的日期和时间数据类型,并且是具有时区的时间戳。

  • 时间戳和时间戳存储时间戳值的 8字节存储,如以下命令所示:

SELECT typname, typlenFROM pg_typeWHERE 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如何实现自动更新时间戳"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

时间 更新 数据 类型 字段 时区 触发器 时候 存储 含义 数据库 篇文章 应用 业务 内容 创建人 实习生 就是 系统 面的 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 小牛君宣传服务器有用吗 迅雷网极品美女数据库15 人工智能应用软件开发包含哪些 2019三级计算机网络技术 微商下单软件开发辅助 艾尔登法环老是断开服务器怎么办 东莞互联网科技有限公司 数据库中的identity(1 服务器的硬盘怎么没了 大学数据库技术好过吗 婚纱摄影软件开发 深海迷航数据库有英文 衢州龙游县企业软件开发 高中网络技术应用选修一 天刀手游关闭所有服务器 java测试数据库连接 如何给数据库表赋查询权限 浙教版高中网络技术应用 网络安全金融科技云平台 国家电网网络安全红蓝对抗 怎么查oracle数据库分区 邮件服务器分为 软件开发之免费的画图软件 无服务器web应用程序 软件开发代码分为php和 交通网络安全公益广告视频 上海品质软件开发联系人 网络安全和信息化安全会议 软件开发什么语言最好接单 国际通用的数据库证
0