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"();