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

Funktionsweise von LocalTimeStamp() in PostgreSQL

In PostgreSQL der localtimestamp() Die Funktion gibt das lokale Datum und die Uhrzeit ohne Zeitzonenverschiebung zurück.

Wenn Sie den Zeitzonenoffset benötigen, verwenden Sie current_timestamp() stattdessen.

Syntax

Sie können es auf eine der folgenden Arten verwenden:

localtimestamp
localtimestamp(x)

Wobei x ist ein optionaler Genauigkeitsparameter, der bewirkt, dass das Ergebnis auf x gerundet wird Anzahl der Nachkommastellen im Sekundenfeld.

Ohne einen Genauigkeitsparameter (die erste Syntax) wird das Ergebnis mit der vollen verfügbaren Genauigkeit ausgegeben.

Beispiel – Vollständige Genauigkeit

Hier ist ein einfaches Beispiel, um ein Ergebnis mit der vollen verfügbaren Genauigkeit zu demonstrieren.

SELECT localtimestamp;

Ergebnis:

2020-07-01 15:55:48.039777

Beispiel – Spezifische Präzision

Hier ist ein Beispiel, um zu demonstrieren, wie die Genauigkeit angegeben wird.

SELECT localtimestamp(0);

Ergebnis:

2020-07-01 15:56:02

In diesem Beispiel habe ich eine Genauigkeit von Null angegeben, was bedeutet, dass keine Sekundenbruchteile zurückgegeben wurden.

Hier ist ein weiteres Beispiel, in dem ich eine Anzahl von Sekundenbruchteilen spezifiziere.

SELECT localtimestamp(3);

Ergebnis:

2020-07-01 15:56:14.771

Transaktionen

Der tatsächliche Zeitstempel basiert auf der Startzeit der aktuellen Transaktion. Daher ändert es sich im Verlauf der Transaktion nicht.

Dadurch kann eine einzelne Transaktion eine konsistente Vorstellung von der „aktuellen“ Zeit haben, sodass mehrere Änderungen innerhalb derselben Transaktion denselben Zeitstempel tragen.

Hier ist ein Beispiel, das dies demonstriert.

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

Hier ist die vollständige Ausgabe meines Terminals, wenn ich diese Transaktion in psql ausführe:

postgres=# BEGIN;
BEGIN
postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


postgres=# COMMIT;
COMMIT

Alle drei Zeitwerte sind identisch, obwohl pg_sleep() wurde verwendet, um die Ausführung zwischen den einzelnen Anweisungen innerhalb der Transaktion zu verzögern.

Dies steht im Gegensatz zu statement_timestamp() was macht ändern sich mit jeder Anweisung.

Mehrere Aufrufe innerhalb einer Anweisung

Es ändert sich auch nicht, wenn die Anweisung fortschreitet.

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

Ergebnis (bei vertikaler Ausgabe):

localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801

Alle drei Zeitwerte sind identisch, obwohl pg_sleep() Funktion wurde verwendet, um die Ausführung zwischen jedem Aufruf von localtimestamp zu verzögern .

Dies steht im Gegensatz zu clock_timestamp() Funktion, die macht ändern, während es durch die Anweisung fortschreitet.

In diesem Beispiel habe ich die vertikale Ausgabe (auch als erweiterte Ausgabe bezeichnet) verwendet, um die Ergebnisse etwas kompakter zu machen.

Sie können die erweiterte Ausgabe in psql mit \x umschalten .