postgresql设置自动更新时间方法

  • 在我们日常开发中,在设计数据库字段的时候不可避免的都要created_time(创建时间)以及updated_time(修改时间)两个时间戳字段,作用大家也都一目了然。下面将为大家详细介绍两个字段的如何去设置来达到你想要的那个样子.我将用Navicat以及sql语句来大家详细介绍

一、created_time

首先是created_time,我们可以通过Navicat在添加字段时候将字段设置为timestamp类型,生成时间戳方式为CURRENT_TIMESTAMP或者设置为now()
至于SQL语句只需在建表过程default 一下就行这里不做赘述。
在这里插入图片描述

二、updated_time

接下来是updated_time,也就是我们本篇文章的重点,相信你已经找遍了度娘还没解决吧,没关系,我来帮你解决。

postgresql更新时间戳需要通过触发器来实现,至于有没有其他方式,我暂时还没找到。

1、首先需要通过代码创建函数,也就是定义触发器

CREATE OR REPLACE FUNCTION "public"."cs_timestamp"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
begin
    new.updated_time= current_timestamp;
    return new;
end
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100

cs_timestamp():为你定义函数的名称。
updated_time:为你表中更新时间戳字段名称(pgsql不可以大写的)。
其他的不用管执行就可以了。此过程只能通过sql实现.

2、接下来就是创建触发器了

create trigger cs_name before update on student for each row execute procedure cs_timestamp();

cs_name:触发器名称,可以随意设置,但是不要设置成中文的。
student:表名
cs_timestamp():触发器所要用的函数名称,与第一步函数名称保持一致。

django开发我给它写到了迁移文件里面了:
在这里插入图片描述

此过程可以通过Navicat设置,我用的是Navicat15,大家仅供参考
在这里插入图片描述
结尾:当然函数可以在建好表后定义,也可以在建表前定义,这里无伤大雅。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41866851/article/details/127301792