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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章