PostgresSQL设置表中update_time字段在更新时timestamp自动更新

PostgresSQL设置表中update_time字段在更新时timestamp自动更新

环境:
Centos 7.5

使用Navicat打开Mysql数据库时,在设计表的里面值类型为timestamp的字段中可以勾选根据当前时间戳更新,即可实现在表数据有更新的时候自动更新时间戳。
那么Navicat打开PostgresSQL数据库时并没有类似方便的操作,该如何实现呢?答案是设置触发器来达到目的。

解决办法:

方法1. 使用navicat的设计表中触发器选项**

假设当前数据表为t_data_test(id, data, date_created, date_updated),操作如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

方法2. 打开t_data_test.sql文件,添加如下内容**

直接在PostgresSQL的转储的sql文件中添加触发器部分代码。 假设当前数据表为t_data_test(id, data, date_created, date_updated), 转储文件时t_data_test.sql

-- ----------------------------
-- Table structure for t_data_test
-- ----------------------------
DROP TABLE IF EXISTS "public"."t_data_test";
CREATE TABLE "public"."t_data_test" (
  "id" varchar(64) COLLATE "pg_catalog"."default" NOT NULL,
  "data" text COLLATE "pg_catalog"."default" NOT NULL,
  "date_created" timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP,
  "date_updated" timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP
)
;
COMMENT ON COLUMN "public"."t_data_test"."id" IS 'id号';
COMMENT ON COLUMN "public"."t_data_test"."data" IS '数据';
COMMENT ON COLUMN "public"."t_data_test"."date_created" IS '创建时间';
COMMENT ON COLUMN "public"."t_data_test"."date_updated" IS '更新时间';

-- ----------------------------
-- Primary Key structure for table t_data_test
-- ----------------------------
ALTER TABLE "public"."t_data_test" ADD CONSTRAINT "t_data_test_pkey" PRIMARY KEY ("id");

-- ----------------------------
-- Function stucture for update_timestamp
-- ----------------------------
DROP FUNCTION IF EXISTS "public"."update_timestamp"();
CREATE OR REPLACE FUNCTION "public"."update_timestamp"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
BEGIN
  NEW.date_updated = CURRENT_TIMESTAMP;
  RETURN NEW;
END
$BODY$
  LANGUAGE plpgsql VOLATILE
  COST 100;
    
-- ----------------------------
-- Triggers structure for table t_data_test to update timestamp
-- ----------------------------
CREATE TRIGGER "tdt_update_time" BEFORE UPDATE on "public"."t_data_test"
FOR EACH ROW
EXECUTE PROCEDURE "public"."update_timestamp"();

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页