一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數據庫技術|

服務器之家 - 數據庫 - PostgreSQL - PostgreSQL自動更新時間戳實例代碼

PostgreSQL自動更新時間戳實例代碼

2022-01-19 18:08青Cheng序員石頭 PostgreSQL

最近有這么一個工程,需要使用postgresql數據庫,在數據庫中的好幾個表中都需要時間戳這個字段,這篇文章主要給大家介紹了關于PostgreSQL自動更新時間戳的相關資料,需要的朋友可以參考下

什么是PostgreSQL時間戳數據類型?

在PostgreSQL中,下一個數據類型是 TIMESTAMP ,它可以存儲 TIME 和 DATE 值。但它不支持任何 時區數據。這意味著當我們轉換數據庫服務器的 時區時, 時間戳值將存儲在數據庫中,并且不能重復修改。

在PostgreSQL中,TIMESTAMP數據類型分為 兩種時間數據類型,如下:

  • timestamp
  • timpstamptz

Timestamp: : 使用時間戳數據類型 ,不帶時區。

Timestamptz: : timestamptz數據類型用于帶有時區的 。

注意:

  • timestamptz數據類型是與時區相關的日期和時間數據類型,并且是具有時區的時間戳。
  • 時間戳和時間戳存儲時間戳值的 8字節存儲,如以下命令所示:
?
1
2
3
SELECT typname, typlen
FROM pg_type
WHERE 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值,如下面所示。

?
1
2
3
4
CREATE TABLE users (
  ...
  create_at timestamp(6) default current_timestamp
)

為create_at字段設置一個默認值current_timestamp當前時間戳,這樣達到了通過在 INSERT 語句中提供值來顯式地覆蓋該列的值。

但上面的這種方式只是對于insert行數據的時候管用,如果對行更新的時候,我們需要使用到數據庫的觸發器trigger。

首先我們編寫一個觸發器update_modified_column如下面的代碼所示,含義是更新表的字段update_at為當前時間戳。

?
1
2
3
4
5
6
7
CREATE OR REPLACE FUNCTION update_modified_column()
RETURNS TRIGGER AS $$
BEGIN
    NEW.update_at = now();
    RETURN NEW;
END;
$$ language 'plpgsql';

然后我們應用這個觸發器,如何應用呢?當然是為這個觸發器設置觸發條件。

?
1
CREATE TRIGGER update_table_name_update_at BEFORE UPDATE ON table_name FOR EACH ROW EXECUTE PROCEDURE  update_modified_column();

即代表的含義是更新表table_name行數據的時候,執行這個觸發器,我們需要為每一個表設置應用這個觸發器!至此,達到目的。

總結

到此這篇關于PostgreSQL自動更新時間戳的文章就介紹到這了,更多相關PostgreSQL自動更新時間戳內容請搜索服務器之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持服務器之家!

原文鏈接:https://juejin.cn/post/7033762606175223839

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 60老妇性xxxxhd | 成人免费一区二区三区在线观看 | 99国产小视频 | 色综久久天天综合绕视看 | 亚欧洲乱码专区视频 | 白丝校花好湿好紧 | 午夜精品久久久久久久99蜜桃 | 成年男女免费视频网站 | 亚洲 另类 欧美 变态屎尿 | 97影视| 国产99视频精品免视看9 | 久久精品国产在热亚洲完整版 | 欧美理论片手机在线观看片免费 | 香蕉免费一区二区三区在线观看 | 久久伊人电影 | 欧美一级视频免费观看 | 18捆绑调教在线高清 | 九九365资源稳定资源站 | 亚洲成A人片在线观看中文L | 喜马拉雅听书免费版 | 国产一级黄毛片 | 欧美娇小性xxxx | 欧美成人aa久久狼窝动画 | 98精品全国免费观看视频 | 美女被草哭 | 女攻双性 | 日本高清中文字幕视频在线 | 99精品久久99久久久久久 | 国产真实偷乱视频在线观看 | 我要看免费毛片 | 国产成人在线播放视频 | 日本高清色视影www日本 | 美女被的视频 | 欧美贵妇videos办公室 | 日韩视频在线免费 | 人人人人人看碰人人免费 | 手机av影院 | 日韩亚洲国产欧美精品 | 俄罗斯一级大片 | 美女的隐私脱裤子无遮挡 | 爽好舒服宝贝添奶吻戏 |