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

Der Zeitstempel von Postgres now() ändert sich nicht, wenn das Skript funktioniert

Von TFM, hebt meins hervor:

9.9.4. Aktuelles Datum/aktuelle Uhrzeit

PostgreSQL bietet eine Reihe von Funktionen, die Werte zurückgeben, die sich auf das aktuelle Datum und die aktuelle Uhrzeit beziehen. Diese SQL-Standardfunktionen geben alle Werte zurück, die auf der Startzeit der aktuellen Transaktion basieren :

CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
CURRENT_TIMESTAMP(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)

...

Da diese Funktionen die Startzeit der aktuellen Transaktion zurückgeben, ändern sich ihre Werte während der Transaktion nicht. Dies wird als Feature betrachtet:Die Absicht besteht darin, einer einzelnen Transaktion eine konsistente Vorstellung von der "aktuellen" Zeit zu ermöglichen, sodass mehrere Änderungen innerhalb derselben Transaktion denselben Zeitstempel tragen.

PostgreSQL stellt auch Funktionen bereit, die die Startzeit der aktuellen Anweisung sowie die tatsächliche aktuelle Zeit zum Zeitpunkt des Aufrufs der Funktion zurückgeben. Die vollständige Liste der Nicht-SQL-Standard-Zeitfunktionen ist:

transaction_timestamp()
statement_timestamp()
clock_timestamp()
timeofday()
now()

transaction_timestamp() entspricht CURRENT_TIMESTAMP , wird aber so benannt, dass er klar widerspiegelt, was er zurückgibt. statement_timestamp() gibt die Startzeit der aktuellen Anweisung zurück (genauer gesagt die Zeit des Empfangs der letzten Befehlsnachricht vom Client).statement_timestamp() und transaction_timestamp() geben während des ersten Befehls einer Transaktion denselben Wert zurück, können sich jedoch bei nachfolgenden Befehlen unterscheiden. clock_timestamp() gibt die aktuelle Uhrzeit zurück , und daher ändert sich sein Wert sogar innerhalb eines einzelnen SQL-Befehls. timeofday() ist eine historische PostgreSQL-Funktion. Wie clock_timestamp() , gibt es die tatsächliche aktuelle Uhrzeit zurück, jedoch als formatierte Textzeichenfolge und nicht als Zeitstempel mit Zeitzonenwert.now() ist ein traditionelles PostgreSQL-Äquivalent zu transaction_timestamp() .