1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【PostgreSQL】同じ時刻関数を同一SQL文に複数記述すると?

Posted at

はじめに

最近開発で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において、時刻系関数はトランザクション開始時の時刻を参照するため、複数呼び出しても同じ値をとるようです。

まとめ

ふと気になったことをメモ書き程度に書いてみました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?