Não há diferença. Três citações do manual:
1)
Todas essas funções padrão do SQL retornam valores com base no horário de início da transação atual:
...
...
CURRENT_TIMESTAMP
2)
transaction_timestamp()
é equivalente a CURRENT_TIMESTAMP
, mas é nomeado para refletir claramente o que retorna.
3)
now()
é um equivalente tradicional do PostgreSQL transaction_timestamp()
.
Negrito ênfase minha. CURRENT_TIMESTAMP
, transaction_timestamp()
E now()
fazer exatamente o mesmo. CURRENT_TIMESTAMP
é uma singularidade sintática para uma função, sem parênteses à direita. Isso está de acordo com o padrão SQL.
Se você não declarar um alias de coluna para uma chamada de função em uma instrução SQL, o alias usará como padrão o nome da função. Internamente, o SQL padrão CURRENT_TIMESTAMP
é implementado com now()
. Até o Postgres 9.6, exibido no nome da coluna resultante , que era "agora", mas alterado para "current_timestamp" no Postgres 10.
transaction_timestamp()
faz o mesmo, mas esta é uma função apropriada do Postgres, portanto o alias padrão sempre foi "transaction_timestamp".
Você não confundir qualquer uma destas funções com o especial constante de entrada'now'
. Essa é apenas uma das várias atalhos notáveis para valores específicos de data / hora / carimbo de data / hora, citando o manual:
... que serão convertidos em valores comuns de data / hora quando lidos. (Em particular, now
as seqüências de caracteres relacionadas e são convertidas em um valor de tempo específico assim que são lidas.) Todos esses valores precisam ser colocados entre aspas simples quando usados como constantes nos comandos SQL.
Isso pode aumentar a confusão de que (até pelo menos o Postgres 12) qualquer número de espaços à esquerda e à direita e colchetes ( {[( )]}
) são aparados a partir desses valores de entrada especiais. Portanto 'now()'::timestamptz
- ou apenas 'now()'
onde nenhum tipo explícito de conversão é necessário - também é válido e passa a ser avaliado com o mesmo registro de data e hora da função now()
na maioria dos contextos . Mas essas são constantes e normalmente não são o que você deseja como padrão da coluna, por exemplo.
db <> violino aqui Violino SQL
velho
Alternativas notáveis são statement_timestamp()
e clock_timestamp()
. O manual:
statement_timestamp()
retorna a hora de início da instrução atual (mais especificamente, a hora do recebimento da última mensagem de comando do cliente). [...]
clock_timestamp()
retorna a hora atual real e, portanto, seu valor muda mesmo dentro de um único comando SQL.
Nota: statement_timestamp()
é STABLE
como o acima (sempre retorna o mesmo valor dentro do mesmo comando SQL). Mas clock_timestamp()
necessariamente é apenas VOLATILE
. A diferença pode ser significativa.
where items.createddate > now()
:?