PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie pg_sleep_for() in PostgreSQL funktioniert

In PostgreSQL können Sie den pg_sleep_for() verwenden Funktion, um die Ausführung für ein bestimmtes Intervall zu verzögern.

Es versetzt den Prozess der aktuellen Sitzung in den Ruhezustand, bis das angegebene Intervall abgelaufen ist.

Die Schlafverzögerung beträgt mindestens solange wie angegeben. Abhängig von Faktoren wie der Serverlast sowie der effektiven Auflösung des Ruheintervalls auf Ihrer Plattform kann es jedoch länger dauern.

Syntax

Die Syntax lautet wie folgt:

pg_sleep_for(interval)

Wobei interval ist ein Intervall, das das Intervall angibt, bevor der Prozess fortgesetzt wird.

Beispiel

Hier ist ein Beispiel, um die Verwendung zu demonstrieren.

\x
SELECT 
  clock_timestamp(),
  pg_sleep_for('2 minutes 10 seconds'),
  clock_timestamp(),
  pg_sleep_for('1 minute 5 seconds'),
  clock_timestamp();

Ergebnis (bei vertikaler Ausgabe):

clock_timestamp | 2020-06-28 15:14:26.53039+10
pg_sleep_for    |
clock_timestamp | 2020-06-28 15:16:36.595837+10
pg_sleep_for    |
clock_timestamp | 2020-06-28 15:17:41.671152+10

Ich habe clock_timestamp() verwendet in diesem Beispiel, weil es sich während der Anweisungsausführung ändert. Dadurch können wir die aktualisierten Werte sehen, während die Anweisung fortschreitet.

Ich habe in diesem Beispiel die erweiterte Anzeige (manchmal auch als „vertikale Ausgabe“ bezeichnet) verwendet, um das Ergebnis besser sichtbar zu machen.

Sie können die erweiterte Anzeige in psql umschalten, indem Sie \x verwenden .

Negative Werte

Die Angabe eines negativen Werts führt dazu, dass die Anweisung sofort ausgeführt wird.

SELECT 
  clock_timestamp(),
  pg_sleep_for('-2 minutes 10 seconds'),
  clock_timestamp(),
  pg_sleep_for('-1 minute 5 seconds'),
  clock_timestamp();

Ergebnis (bei vertikaler Ausgabe):

clock_timestamp | 2020-06-29 09:01:09.468232+10
pg_sleep_for    |
clock_timestamp | 2020-06-29 09:01:09.468291+10
pg_sleep_for    |
clock_timestamp | 2020-06-29 09:01:09.468297+10