PostgreSQL自動更新時間戳
導讀 |
最近有這麼一個工程,需要使用postgresql資料庫,在資料庫中的好幾個表中都需要時間戳這個欄位,這篇文章主要給大家介紹了關於PostgreSQL自動更新時間戳的相關資料,需要的朋友可以參考下
|
在PostgreSQL中,下一個資料型別是 TIMESTAMP ,它可以儲存 TIME 和 DATE 值。但它不支援任何 時區資料。這意味著當我們轉換資料庫伺服器的 時區時, 時間戳值將儲存在資料庫中,並且不能重複修改。
在PostgreSQL中,TIMESTAMP資料型別分為 兩種時間資料型別,如下:
timestamp
timpstamptz
Timestamp: : 使用時間戳資料型別 ,不帶時區。
Timestamptz: : timestamptz資料型別用於帶有時區的 。
注意:
- timestamptz資料型別是與時區相關的日期和時間資料型別,並且是具有時區的時間戳。
- 時間戳和時間戳儲存時間戳值的 8位元組儲存,如以下 所示:
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值,如下面所示。
CREATE TABLE users ( ... create_at timestamp(6) default current_timestamp )
為create_at欄位設定一個預設值current_timestamp當前時間戳,這樣達到了透過在 INSERT 語句中提供值來顯式地覆蓋該列的值。
但上面的這種方式只是對於insert行資料的時候管用,如果對行更新的時候,我們需要使用到資料庫的觸發器trigger。
首先我們編寫一個觸發器update_modified_column如下面的程式碼所示,含義是更新表的欄位update_at為當前時間戳。
CREATE OR REPLACE FUNCTION update_modified_column() RETURNS TRIGGER AS $$ BEGIN NEW.update_at = now(); RETURN NEW; END; $$ language 'plpgsql';
然後我們應用這個觸發器,如何應用呢?當然是為這個觸發器設定觸發條件。
CREATE TRIGGER update_table_name_update_at BEFORE UPDATE ON table_name FOR EACH ROW EXECUTE PROCEDURE update_modified_column();
即代表的含義是更新表table_name行資料的時候,執行這個觸發器,我們需要為每一個表設定應用這個觸發器!至此,達到目的。
原文來自 :
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2847590/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Mongoose無法更新時間戳Go時間戳
- JavaScript 自動更新時間JavaScript
- Linux自動更新時間Linux
- PostgreSQL 插入時間與更新時間(qbit)SQL
- jmeter 介面自動化連載 (11) - 列印時間戳JMeter時間戳
- MyBatis自動設定建立時間和更新時間MyBatis
- MySQL時間戳、時間MySql時間戳
- Linux系統自動更新時間Linux
- JavaScript自動更新時間效果詳解JavaScript
- sqlalchemy實現時間列自動更新SQL
- PostgreSQL官方並行更新時間表SQL並行
- JavaScript 時間戳JavaScript時間戳
- kafka時間戳Kafka時間戳
- oracle 時間欄位自動更新問題Oracle
- javascript時間戳與php返回的時間戳統一JavaScript時間戳PHP
- 時間型別和時間戳型別時間戳
- 時間轉換成時間戳時間戳
- C 時間轉換時間戳時間戳
- C# 時間戳轉時間C#時間戳
- java時間戳和PHP時間戳的轉換phptime()Java時間戳PHP
- C 時間戳轉換成時間時間戳
- 時間戳轉化為時間格式時間戳
- 兩個時間戳的時間差時間戳
- 時間戳轉化為動態時鐘--moment時間戳
- win10如何設定自動更新時間 win10時間不自動同步Win10
- JavaScript獲取時間戳JavaScript時間戳
- Python-時間戳Python時間戳
- Excel中時間戳轉換時間Excel時間戳
- PostgreSQL 併發控制機制(3):基於時間戳的併發控制SQL時間戳
- c++ 獲取當前時間周初凌晨時間戳(獲取當前時間週一凌晨時間戳)C++時間戳
- javascript將時間物件轉換為時間戳JavaScript物件時間戳
- PHP日期格式轉時間戳PHP時間戳
- 設定oralce時間戳格式時間戳
- Unix 字串時間戳問題字串時間戳
- 時間戳效能最佳化時間戳
- 時間戳與時間字串的多時區轉換時間戳字串
- js獲取某時間的當天0點時間戳 與某時間的當週週一0點時間戳JS時間戳
- windows10系統設定時間自動更新的方法Windows