2012-08-31 72 views
27

我創建了我與列表(類型:時間戳和時區)和它的默認值設置爲now()current_timestamp())。NOW()的默認值都顯示相同的時間戳

我在單個函數中的單獨語句中運行一系列插入,並且我注意到所有時間戳都等於(ms),是函數值以某種方式緩存並在整個函數調用或事務中共享?

+0

'不()'?你的意思是'現在()'?由於歷史原因,'current_timestamp'沒有後面的括號。 –

回答

43

也就是說expected and documented行爲:

手冊:

由於這些函數返回當前事務的開始時間,因此在事務處理期間它們的值不會更改。這被認爲是一個特徵:意圖是允許單個交易具有「當前」時間的一致概念,以便在同一個交易中的多個修改具有相同的時間戳。

如果你想要的東西,改變每次運行語句時,你需要使用statement_timestamp()甚至clock_timestamp()(再參照說明書中的描述)

12

now()current_timestampSTABLE函數返回時的時間戳交易開始

考慮一個other options PostgreSQL offers,特別是statement_timestamp()
Per documentation

statement_timestamp()返回當前語句的開始時間(更具體地說,收到最後命令消息的來自客戶端的時間)