我創建了我與列表(類型:時間戳和時區)和它的默認值設置爲now()
(current_timestamp()
)。NOW()的默認值都顯示相同的時間戳
我在單個函數中的單獨語句中運行一系列插入,並且我注意到所有時間戳都等於(ms),是函數值以某種方式緩存並在整個函數調用或事務中共享?
我創建了我與列表(類型:時間戳和時區)和它的默認值設置爲now()
(current_timestamp()
)。NOW()的默認值都顯示相同的時間戳
我在單個函數中的單獨語句中運行一系列插入,並且我注意到所有時間戳都等於(ms),是函數值以某種方式緩存並在整個函數調用或事務中共享?
也就是說expected and documented行爲:
手冊:
由於這些函數返回當前事務的開始時間,因此在事務處理期間它們的值不會更改。這被認爲是一個特徵:意圖是允許單個交易具有「當前」時間的一致概念,以便在同一個交易中的多個修改具有相同的時間戳。
如果你想要的東西,改變每次運行語句時,你需要使用statement_timestamp()
甚至clock_timestamp()
(再參照說明書中的描述)
now()
或current_timestamp
是STABLE
函數返回時的時間戳交易開始。
考慮一個other options PostgreSQL offers,特別是statement_timestamp()
。
Per documentation:
statement_timestamp()
返回當前語句的開始時間(更具體地說,收到最後命令消息的來自客戶端的時間)
'不()'?你的意思是'現在()'?由於歷史原因,'current_timestamp'沒有後面的括號。 –