teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

加筆

2021/06/08 07:54

投稿

退会済みユーザー
answer CHANGED
@@ -4,4 +4,24 @@
4
4
 
5
5
  > time、timestampおよびintervalは秒フィールドに保有されている小数点以下の桁数を指定する精度値pをオプションで受け付けます。 デフォルトでは、精度についての明示的な限界はありません。 pの許容範囲は0から6です。
6
6
 
7
- timestamp(0)で使えばいいと思う。
7
+ timestamp(0)で使えばいいと思う。
8
+
9
+ ---
10
+
11
+ CURRENT_TIMESTAMPについても触れておくと、
12
+ PostgreSQLでは現在タイムスタンプの取得にいくつかやり方があって、
13
+ 場合によって使い分けなきゃいけない。
14
+
15
+ [9.9.4. 現在の日付/時刻](https://www.postgresql.jp/document/12/html/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT)
16
+
17
+ > transaction_timestamp()
18
+ > statement_timestamp()
19
+ > clock_timestamp()
20
+ > timeofday()
21
+ > now()
22
+
23
+ > transaction_timestamp()はCURRENT_TIMESTAMPと等価ですが、明確に何を返すかを反映する名前になっています。 statement_timestamp()は現在の文の実行開始時刻を返すものです(より具体的にいうと、直前のコマンドメッセージをクライアントから受け取った時刻です)。
24
+ > statement_timestamp()およびtransaction_timestamp()はトランザクションの最初のコマンドでは同じ値を返しますが、その後に引き続くコマンドでは異なる可能性があります。
25
+ > clock_timestamp()は実際の現在時刻を返しますので、その値は単一のSQLコマンドであっても異なります。
26
+ > timeofday()はPostgreSQLの歴史的な関数です。 clock_timestamp()同様、実際の現在時刻を返しますが、timestamp with time zone型の値ではなく、整形されたtext文字列を返します。
27
+ > now()はtransaction_timestamp()と同じもので、伝統的なPostgreSQL関数です。