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

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

    PostgreSQLでは、current_timestamp() 関数は、タイムゾーンオフセットを含む現在の日付と時刻を返します。

    返されるタイムスタンプは、現在のトランザクションの開始時刻に基づいています。

    構文

    次のいずれかの方法で使用できます。

    current_timestamp
    current_timestamp(x)

    ここでx はオプションの精度パラメータであり、結果はxに丸められます。 秒フィールドの小数桁数。

    精度パラメーター(最初の構文)がない場合、結果は使用可能な完全な精度になります。

    例–完全な精度

    これは、利用可能な完全な精度を使用して結果を示すための基本的な例です。

    SELECT current_timestamp;

    結果:

    2020-07-01 15:42:35.630594+10

    例–特定の精度

    精度を指定する方法を示す例を次に示します。

    SELECT current_timestamp(0);

    結果:

    2020-07-01 15:42:58+10

    この例では、精度をゼロに指定しました。これは、小数秒が返されないことを意味します。

    これは、小数秒の数を指定する別の例です。

    SELECT current_timestamp(3);

    結果:

    2020-07-01 15:43:16.644+10

    トランザクション

    実際のタイムスタンプは、現在のトランザクションの開始時刻に基づいています。したがって、トランザクションが進行しても変化しません。

    これにより、単一のトランザクションが「現在の」時刻の一貫した概念を持つことができるため、同じトランザクション内の複数の変更に同じタイムスタンプが付けられます。

    これを示す例を次に示します。

    BEGIN;
    SELECT current_timestamp;
    SELECT pg_sleep(5);
    SELECT current_timestamp;
    SELECT pg_sleep(5);
    SELECT current_timestamp;
    COMMIT;

    psqlでそのトランザクションを実行したときの端末の完全な出力は次のとおりです。

    postgres=# BEGIN;
    BEGIN
    postgres=# SELECT current_timestamp;
           current_timestamp       
    -------------------------------
     2020-07-02 09:02:52.952669+10
    (1 row)
    
    
    postgres=# SELECT pg_sleep(5);
     pg_sleep 
    ----------
     
    (1 row)
    
    
    postgres=# SELECT current_timestamp;
           current_timestamp       
    -------------------------------
     2020-07-02 09:02:52.952669+10
    (1 row)
    
    
    postgres=# SELECT pg_sleep(5);
     pg_sleep 
    ----------
     
    (1 row)
    
    
    postgres=# SELECT current_timestamp;
           current_timestamp       
    -------------------------------
     2020-07-02 09:02:52.952669+10
    (1 row)
    
    
    postgres=# COMMIT;
    COMMIT

    pg_sleep()であっても、3つの時間値はすべて同じです。 関数は、トランザクション内の各ステートメント間の実行を遅らせるために使用されました。

    これは、statement_timestamp()とは対照的です。 行う ステートメントごとに変更します。

    ステートメント内の複数の呼び出し

    また、ステートメントが進行しても変化しません。

    \x
    SELECT 
      current_timestamp,
      pg_sleep(5),
      current_timestamp,
      pg_sleep(5),
      current_timestamp;

    結果(垂直出力を使用):

    current_timestamp | 2020-07-02 09:04:03.413062+10
    pg_sleep          | 
    current_timestamp | 2020-07-02 09:04:03.413062+10
    pg_sleep          | 
    current_timestamp | 2020-07-02 09:04:03.413062+10

    pg_sleep()であっても、3つの時間値はすべて同じです。 関数は、current_timestampへの各呼び出し間の実行を遅らせるために使用されました 。

    これは、clock_timestamp()とは対照的です。 関数、実行 ステートメントが進むにつれて変化します。

    ちなみに、結果を少しコンパクトにするために、垂直出力(拡張出力とも呼ばれます)を使用しました。

    \xを使用して、psqlの拡張出力を切り替えることができます 。


    1. Django Migrationsで削除されたテーブルを再作成するにはどうすればよいですか?

    2. SQLite Order By Date1530019888000

    3. Barmanを使用したPostgreSQLのバックアップ-概要

    4. ダイレクトNFSでのORA-4031エラー