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

current_timeがPostgreSQLでどのように機能するか

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

    返される時間は、現在のトランザクションの開始時間に基づいています。

    構文

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

    current_time
    current_time(x)

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

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

    例–完全な精度

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

    SELECT current_time;

    結果:

    14:33:30.731384+10

    例–特定の精度

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

    SELECT current_time(0);

    結果:

    15:35:38+10

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

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

    SELECT current_time(3);

    結果:

    15:37:43.385+10

    トランザクション

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

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

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

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

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

    postgres=# BEGIN;
    BEGIN
    postgres=# SELECT current_time;
        current_time    
    --------------------
     09:09:27.524852+10
    (1 row)
    
    
    postgres=# SELECT pg_sleep(5);
    SELECT current_time;
    SELECT pg_sleep(5);
    SELECT current_time;
    COMMIT;
     pg_sleep 
    ----------
     
    (1 row)
    
    
    postgres=# SELECT current_time;
        current_time    
    --------------------
     09:09:27.524852+10
    (1 row)
    
    
    postgres=# SELECT pg_sleep(5);
     pg_sleep 
    ----------
     
    (1 row)
    
    
    postgres=# SELECT current_time;
        current_time    
    --------------------
     09:09:27.524852+10
    (1 row)
    
    
    postgres=# COMMIT;
    COMMIT

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

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

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

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

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

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

    current_time | 09:11:16.09445+10
    pg_sleep     | 
    current_time | 09:11:16.09445+10
    pg_sleep     | 
    current_time | 09:11:16.09445+10

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

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

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

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


    1. ユーザー入力に依存する長いクエリに対してPHPでMySQLエラーを表示するにはどうすればよいですか?

    2. SQLServer2008および2008R2のサポートの終了

    3. MariaDBでのDATE_FORMAT()のしくみ

    4. SETSTATISTICSIOからの誤解を招くデータに注意してください