PostgreSQLでは、statement_timestamp()
関数は、現在のステートメントの開始時に、現在の日付と時刻(タイムゾーンオフセットを含む)を返します。
この関数はパラメータを受け入れないため、精度を指定することはできません。
また、statement_timestamp()
非SQL標準関数です。
構文
構文は次のようになります:
statement_timestamp()
引数は必要ありません。
基本的な例
これがデモンストレーションの基本的な例です。
SELECT statement_timestamp();
結果:
2020-07-02 09:30:45.46903+10
トランザクション内
これは、トランザクション内でどのように機能するかを示す例です。
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;
psqlを使用した場合の端末内の完全な出力は次のとおりです。
postgres=# BEGIN; BEGIN postgres=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2020-07-02 09:31:13.363128+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2020-07-02 09:31:18.424503+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2020-07-02 09:31:23.501539+10 (1 row) postgres=# COMMIT; COMMIT
この例では、pg_sleep()
を使用しました 各ステートメント間の実行を遅らせる関数。
各statement_timestamp()
呼び出しは独自のSQLステートメントに含まれており、返されるタイムスタンプは呼び出しごとに異なります。
これは、transaction_timestamp()
とは対照的です。 、しない ステートメントごとに変更します。トランザクションの開始時刻に基づいてタイムスタンプを返します。
ステートメント内の複数の呼び出し
これは、3つの関数呼び出しすべてを1つのSQLステートメント内で組み合わせた場合に何が起こるかの例です。
\x
SELECT
statement_timestamp(),
pg_sleep(5),
statement_timestamp(),
pg_sleep(5),
statement_timestamp();
結果(垂直出力を使用):
statement_timestamp | 2020-07-02 09:34:41.06911+10 pg_sleep | statement_timestamp | 2020-07-02 09:34:41.06911+10 pg_sleep | statement_timestamp | 2020-07-02 09:34:41.06911+10
今回は、pg_sleep()
であっても、3つのタイムスタンプ値はすべて同じです。 関数は、statement_timestamp()
への各呼び出し間の実行を遅らせるために使用されました 。
これは、clock_timestamp()
とは対照的です。 関数。ステートメントの進行中にも変化します(ステートメント内で複数回呼び出された場合)。