sql >> Base de Datos >  >> RDS >> PostgreSQL

La marca de tiempo de Postgres now () no cambia, cuando el script funciona

De TFM, destaca el mío:

9.9.4. Fecha/hora actual

PostgreSQL proporciona una serie de funciones que devuelven valores relacionados con la fecha y la hora actuales. Estas funciones estándar de SQL todas devuelven valores basados ​​en la hora de inicio de la transacción actual :

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

...

Dado que estas funciones devuelven la hora de inicio de la transacción actual, sus valores no cambian durante la transacción. Esto se considera una característica:la intención es permitir que una sola transacción tenga una noción consistente de la hora "actual", de modo que múltiples modificaciones dentro de la misma transacción lleven la misma marca de tiempo.

PostgreSQL también proporciona funciones que devuelven la hora de inicio de la declaración actual, así como la hora actual real en el instante en que se llama a la función. La lista completa de funciones de tiempo no estándar de SQL es:

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

transaction_timestamp() es equivalente a CURRENT_TIMESTAMP , pero se nombra para reflejar claramente lo que devuelve. statement_timestamp() devuelve la hora de inicio de la declaración actual (más específicamente, la hora de recepción del último mensaje de comando del cliente).statement_timestamp() y transaction_timestamp() devolver el mismo valor durante el primer comando de una transacción, pero puede diferir durante los comandos posteriores. clock_timestamp() devuelve la hora actual y, por lo tanto, su valor cambia incluso dentro de un solo comando SQL. timeofday() es una función histórica de PostgreSQL. Me gusta clock_timestamp() , devuelve la hora actual real, pero como una cadena de texto con formato en lugar de una marca de tiempo con valor de zona horaria.now() es un PostgreSQL tradicional equivalente a transaction_timestamp() .