はじめに
最近開発でPostgreSQLを使用していて、同一sql文に現在時刻を取得するnow()を複数記述しているのを見かけました。これって同じ値をとるの?呼び出すたびに少しずつ時間がずれるんじゃないの?という疑問が生じたので調べてみました。
例えば以下のような場合です。
UPDATE hoge
SET
status = 'completed',
updated_at = NOW(),
registered_at = NOW()
WHERE
id = 1
;
SELECT
*
FROM
hoge
WHERE
startTime <= CURRENT_DAT
and CURRENT_DAT <= endTime
;
2つ目だと、仮に(あまりあり得ないが)1つ目のCURRENT_DATと2つ目のCURRENT_DATの間で日付が変わったら、適切に比較処理できないのでは?と思ったりしました。
結論
postgresqlにおいて、時刻系関数はトランザクション開始時の時刻を参照するため、複数呼び出しても同じ値をとるようです。
まとめ
ふと気になったことをメモ書き程度に書いてみました。