PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Il timestamp di Postgres now() non cambia, quando lo script funziona

Da TFM, evidenzia il mio:

9.9.4. Data/ora corrente

PostgreSQL fornisce una serie di funzioni che restituiscono valori relativi alla data e all'ora correnti. Queste funzioni standard SQL tutti restituiscono i valori in base all'ora di inizio della transazione corrente :

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

...

Poiché queste funzioni restituiscono l'ora di inizio della transazione corrente, i loro valori non cambiano durante la transazione. Questa è considerata una caratteristica:l'intento è quello di consentire a una singola transazione di avere una nozione coerente dell'ora "corrente", in modo che più modifiche all'interno della stessa transazione portino lo stesso timestamp.

PostgreSQL fornisce anche funzioni che restituiscono l'ora di inizio dell'istruzione corrente, nonché l'ora corrente effettiva nell'istante in cui viene chiamata la funzione. L'elenco completo delle funzioni temporali non standard SQL è:

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

transaction_timestamp() è equivalente a CURRENT_TIMESTAMP , ma è chiamato per riflettere chiaramente ciò che restituisce. statement_timestamp() restituisce l'ora di inizio dell'istruzione corrente (in particolare, l'ora di ricezione dell'ultimo messaggio di comando dal client).statement_timestamp() e transaction_timestamp() restituisce lo stesso valore durante il primo comando di una transazione, ma potrebbe differire durante i comandi successivi. clock_timestamp() restituisce l'ora attuale , e quindi il suo valore cambia anche all'interno di un singolo comando SQL. timeofday() è una funzione PostgreSQL storica. Comeclock_timestamp() , restituisce l'ora corrente effettiva, ma come una stringa di testo formattata anziché un timestamp con il valore del fuso orario.now() è un tradizionale PostgreSQL equivalente a transaction_timestamp() .