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

PostgreSQLでのpg_sleep_until()のしくみ

    PostgreSQLでは、pg_sleep_until()を使用できます 指定されたタイムスタンプまで実行を遅らせる関数。

    これは、特定のウェイクアップ時間が必要な場合に役立ちます。

    pg_sleep_untilに注意してください 指定された時間に正確にウェイクアップすることは保証されていませんが、それより前にウェイクアップすることはありません。

    構文

    構文は次のようになります:

    pg_sleep_until(timestamp with time zone)

    使用法を示す例を次に示します。

    \x
    SELECT 
      clock_timestamp(),
      pg_sleep_until('today 15:30'),
      clock_timestamp();

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

    clock_timestamp | 2020-06-28 15:29:54.564608+10
    pg_sleep_until  |
    clock_timestamp | 2020-06-28 15:30:00.0119+10

    clock_timestamp()を使用しました この例では、ステートメントの実行中に変更されるためです。これにより、ステートメントの進行に合わせて更新された値を確認できます。

    この例では、結果を見やすくするために、拡張表示(「垂直出力」と呼ばれることもあります)を使用しました。

    \xを使用して、psqlの展開表示を切り替えることができます 。

    例2

    別の例を次に示します。今回は、pg_sleep_until()を追加で呼び出します。 およびclock_timestamp()

    SELECT 
      clock_timestamp(),
      pg_sleep_until('today 15:32'),
      clock_timestamp(),
      pg_sleep_until('today 15:33'),
      clock_timestamp();

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

    clock_timestamp | 2020-06-28 15:31:23.142358+10
    pg_sleep_until  |
    clock_timestamp | 2020-06-28 15:32:00.061566+10
    pg_sleep_until  |
    clock_timestamp | 2020-06-28 15:33:00.074381+10

    例3

    この例では、日付/時刻とタイムゾーンのオフセットを明示的に指定しています。

    また、最初のタイムスタンプが経過した後にクエリを実行します。したがって、すぐに実行されます。

    SELECT 
      clock_timestamp(),
      pg_sleep_until('2020-06-29 08:54:00.000000+10'),
      clock_timestamp(),
      pg_sleep_until('2020-06-29 08:55:00.000000+10'),
      clock_timestamp();

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

    clock_timestamp | 2020-06-29 08:54:17.189189+10
    pg_sleep_until  |
    clock_timestamp | 2020-06-29 08:54:17.189196+10
    pg_sleep_until  |
    clock_timestamp | 2020-06-29 08:55:00.062783+10

    結果が示すように、最初のpg_sleep_until()の17秒後までクエリの実行を開始しませんでした 値であるため、すぐに実行され、実行時のタイムスタンプが使用されました。

    この記事を更新するためだけに何時間も何日も待ちたくなかったので、これらの例ではタイムスタンプがすべてすばやく連続していました。ただし、必要に応じて、先に進んで別の日付を指定することもできます。


    1. JSON_MERGE_PRESERVE()–MySQLで複数のJSONドキュメントをマージする

    2. MariaDBでのCOS()のしくみ

    3. PHPで動的なpostgresプリペアドステートメントを作成する方法

    4. DistinctとGroupByのパフォーマンスが異なる場合はどうなりますか?