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

Funktionsweise von pg_sleep() in PostgreSQL

In PostgreSQL können Sie pg_sleep() verwenden Funktion, um die Ausführung um eine bestimmte Anzahl von Sekunden zu verzögern.

Es versetzt den Prozess der aktuellen Sitzung in den Ruhezustand, bis die angegebene Anzahl von Sekunden verstrichen ist. Es funktioniert ähnlich wie sleep() von MySQL Funktion und auch waitfor von TSQL -Anweisung in SQL Server.

Der pg_sleep() Die Funktion akzeptiert eine doppelte Genauigkeit -Argument, sodass Sie auch Verzögerungen im Bruchteil einer Sekunde angeben können.

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 ist ganz einfach:

pg_sleep(seconds)

Wobei seconds ist eine doppelte Genauigkeit Wert, der angibt, wie viele Sekunden/Sekundenbruchteile vergehen müssen, bevor der Prozess fortgesetzt wird.

Beispiel

Hier ist ein Beispiel, um die Verwendung zu demonstrieren.

\x
SELECT 
  clock_timestamp(),
  pg_sleep(1),
  clock_timestamp(),
  pg_sleep(1),
  clock_timestamp();

Ergebnis (bei vertikaler Ausgabe):

clock_timestamp | 2020-06-28 13:46:53.808072+10
pg_sleep        |
clock_timestamp | 2020-06-28 13:46:54.870423+10
pg_sleep        |
clock_timestamp | 2020-06-28 13:46:55.938278+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 .

Sekundenbruchteile

Wie bereits erwähnt, können Sie bei Bedarf Verzögerungen im Bruchteil einer Sekunde angeben.

SELECT 
  clock_timestamp(),
  pg_sleep(.5),
  clock_timestamp(),
  pg_sleep(.5),
  clock_timestamp();

Ergebnis (bei vertikaler Ausgabe):

clock_timestamp | 2020-06-28 15:03:52.496211+10
pg_sleep        |
clock_timestamp | 2020-06-28 15:03:53.041063+10
pg_sleep        |
clock_timestamp | 2020-06-28 15:03:53.553291+10

Negative Werte

Negative Werte führen zu keiner Verzögerung der Ausführung.

SELECT 
  clock_timestamp(),
  pg_sleep(-1),
  clock_timestamp(),
  pg_sleep(-1),
  clock_timestamp();

Ergebnis (bei vertikaler Ausgabe):

clock_timestamp | 2020-06-29 09:03:19.056681+10
pg_sleep        |
clock_timestamp | 2020-06-29 09:03:19.056682+10
pg_sleep        |
clock_timestamp | 2020-06-29 09:03:19.056683+10