sql >> データベース >  >> RDS >> PostgreSQL

statement_timestamp()がPostgreSQLでどのように機能するか

    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()とは対照的です。 関数。ステートメントの進行中にも変化します(ステートメント内で複数回呼び出された場合)。


    1. 複数の列の集計を含むSQLServerピボットテーブル

    2. データベースシャーディングとは何ですか?

    3. Oracle SQL Developerを使用してテーブルをCSVにエクスポートする方法は?

    4. 「Intelのデフォルトプレフィックス(/ usr / local)のARMプロセッサのHomebrewにインストールできません!」を修正しました。