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

Funktionsweise von statement_timestamp() in PostgreSQL

In PostgreSQL der statement_timestamp() Die Funktion gibt das aktuelle Datum und die Uhrzeit (einschließlich des Zeitzonen-Offsets) zu Beginn der aktuellen Anweisung zurück.

Die Funktion akzeptiert keine Parameter, daher können Sie ihre Genauigkeit nicht angeben.

Außerdem statement_timestamp() ist eine Nicht-SQL-Standardfunktion.

Syntax

Die Syntax lautet wie folgt:

statement_timestamp()

Es sind keine Argumente erforderlich oder akzeptiert.

Einfaches Beispiel

Hier ist ein einfaches Beispiel zur Veranschaulichung.

SELECT statement_timestamp();

Ergebnis:

2020-07-02 09:30:45.46903+10

Innerhalb einer Transaktion

Hier ist ein Beispiel, um zu demonstrieren, wie es innerhalb einer Transaktion funktioniert.

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

Hier ist die vollständige Ausgabe in meinem Terminal bei Verwendung von psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:13.363128+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:18.424503+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:23.501539+10
(1 row)


postgres=# COMMIT;
COMMIT

In diesem Beispiel habe ich den pg_sleep() verwendet Funktion, um die Ausführung zwischen den einzelnen Anweisungen zu verzögern.

Denn jeder statement_timestamp() Aufruf in einer eigenen SQL-Anweisung war, war der zurückgegebene Zeitstempel bei jedem Aufruf unterschiedlich.

Dies steht im Gegensatz zu transaction_timestamp() , was nicht ändern sich mit jeder Aussage. Es gibt seinen Zeitstempel basierend auf der Startzeit der Transaktion zurück.

Mehrere Aufrufe innerhalb einer Anweisung

Hier ist ein Beispiel dafür, was passiert, wenn wir alle drei Funktionsaufrufe in einer einzigen SQL-Anweisung kombinieren.

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

Ergebnis (bei vertikaler Ausgabe):

statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10

Dieses Mal sind alle drei Zeitstempelwerte identisch, obwohl pg_sleep() Funktion wurde verwendet, um die Ausführung zwischen jedem Aufruf von statement_timestamp() zu verzögern .

Dies steht im Gegensatz zu clock_timestamp() -Funktion, die sich auch im Verlauf der Anweisung ändert (wenn sie innerhalb der Anweisung mehrmals aufgerufen wird).