In PostgreSQL können Sie pg_sleep_until()
verwenden Funktion, um die Ausführung bis zu einem bestimmten Zeitstempel zu verzögern.
Dies ist nützlich, wenn eine bestimmte Weckzeit gewünscht wird.
Beachten Sie, dass pg_sleep_until
nicht garantiert genau zur angegebenen Zeit aufwacht, aber es wird nicht früher aufwachen.
Syntax
Die Syntax sieht so aus:
pg_sleep_until(timestamp with time zone)
Beispiel
Hier ist ein Beispiel, um die Verwendung zu demonstrieren.
\x
SELECT
clock_timestamp(),
pg_sleep_until('today 15:30'),
clock_timestamp();
Ergebnis (bei vertikaler Ausgabe):
clock_timestamp | 2020-06-28 15:29:54.564608+10 pg_sleep_until | clock_timestamp | 2020-06-28 15:30:00.0119+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 .
Beispiel 2
Hier ist ein weiteres Beispiel, diesmal mit einem zusätzlichen Aufruf von pg_sleep_until()
und clock_timestamp()
.
SELECT
clock_timestamp(),
pg_sleep_until('today 15:32'),
clock_timestamp(),
pg_sleep_until('today 15:33'),
clock_timestamp();
Ergebnis (bei vertikaler Ausgabe):
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
Beispiel 3
In diesem Beispiel gebe ich Datum/Uhrzeit und Zeitzonen-Offset explizit an.
Außerdem führe ich die Abfrage aus, nachdem der erste Zeitstempel abgelaufen ist. Daher läuft es sofort.
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();
Ergebnis (bei vertikaler Ausgabe):
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
Wie das Ergebnis zeigt, habe ich die Abfrage erst 17 Sekunden nach dem ersten pg_sleep_until()
ausgeführt Wert, und so wurde es sofort ausgeführt und verwendete den Zeitstempel zu der Zeit, als es ausgeführt wurde.
Meine Zeitstempel waren in diesen Beispielen alle schnell hintereinander, weil ich nicht Stunden oder Tage warten wollte, nur um diesen Artikel zu aktualisieren. Sie können jedoch bei Bedarf ein anderes Datum angeben.