PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Postgres now() timestamp não muda, quando o script funciona


Do TFM, destaques meus:

9.9.4. Data/Hora Atual


O PostgreSQL fornece uma série de funções que retornam valores relacionados à data e hora atuais. Essas funções padrão SQL todos retornam valores com base na hora de início da transação atual :
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
CURRENT_TIMESTAMP(precision)
LOCALTIME
LOCALTIMESTAMP
LOCALTIME(precision)
LOCALTIMESTAMP(precision)

...

Como essas funções retornam a hora de início da transação atual, seus valores não mudam durante a transação. Esta é considerada uma característica:a intenção é permitir que uma única transação tenha uma noção consistente da hora "atual", de modo que várias modificações dentro da mesma transação tenham o mesmo carimbo de hora.

O PostgreSQL também fornece funções que retornam a hora de início da instrução atual, bem como a hora atual real no instante em que a função é chamada. A lista completa de funções de tempo não padrão SQL é:
transaction_timestamp()
statement_timestamp()
clock_timestamp()
timeofday()
now()

transaction_timestamp() é equivalente a CURRENT_TIMESTAMP , mas é nomeado para refletir claramente o que ele retorna. statement_timestamp() retorna a hora de início da instrução atual (mais especificamente, a hora de recebimento da última mensagem de comando do cliente).statement_timestamp() e transaction_timestamp() retorna o mesmo valor durante o primeiro comando de uma transação, mas pode diferir durante os comandos subsequentes. clock_timestamp() retorna a hora atual , e, portanto, seu valor muda mesmo dentro de um único comando SQL. timeofday() é uma função histórica do PostgreSQL. Como clock_timestamp() , ele retorna a hora atual real, mas como uma string de texto formatada em vez de um carimbo de data/hora com o valor do fuso horário.now() é um equivalente tradicional do PostgreSQL a transaction_timestamp() .