AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 63548
Accepted
JohnMerlino
JohnMerlino
Asked: 2014-04-21 15:57:57 +0800 CST2014-04-21 15:57:57 +0800 CST 2014-04-21 15:57:57 +0800 CST

Diferença entre now() e current_timestamp

  • 772

No PostgreSQL, uso a função now()and current_timestampe não vejo diferença:

# SELECT now(), current_timestamp;
              now               |              now               
--------------------------------+--------------------------------
 04/20/2014 19:44:27.215557 EDT | 04/20/2014 19:44:27.215557 EDT
(1 row)

Estou esquecendo de algo?

postgresql timestamp
  • 2 2 respostas
  • 84339 Views

2 respostas

  • Voted
  1. Best Answer
    Erwin Brandstetter
    2014-04-21T16:27:54+08:002014-04-21T16:27:54+08:00

    Não há diferença . Três citações do manual:

    1.

    Todas essas funções padrão SQL retornam valores com base na hora de início da transação atual:
    ... ...
    CURRENT_TIMESTAMP

    transaction_timestamp()é equivalente a CURRENT_TIMESTAMP, mas é nomeado para refletir claramente o que ele retorna.

    now()é um equivalente tradicional do PostgreSQL ao transaction_timestamp().

    Minha ênfase em negrito . CURRENT_TIMESTAMP, transaction_timestamp()e now()faça exatamente o mesmo. CURRENT_TIMESTAMPé uma estranheza sintática para uma função, não tendo par de 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 será padronizado para o nome da função. Internamente, o SQL padrão CURRENT_TIMESTAMPé implementado com now(). Até o Postgres 9.6 que aparece no nome da coluna resultante , que era "now", mas mudou para "current_timestamp" no Postgres 10.

    transaction_timestamp()faz o mesmo, mas esta é uma função apropriada do Postgres, então o alias padrão sempre foi "transaction_timestamp".

    Não confunda nenhuma dessas funções com a constante de entrada'now' especial . Esse é apenas um dos vários atalhos de notação para valores específicos de data/hora/timestamp, citando o manual:

    ... que serão convertidos em valores comuns de data/hora quando lidos. (Em particular, nowas strings relacionadas 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 em comandos SQL.

    Pode aumentar a confusão que (até pelo menos Postgres 12) qualquer número de espaços e colchetes à esquerda e à direita ( {[( )]}) são cortados desses valores de entrada especiais. Então 'now()'::timestamptz- ou apenas 'now()'onde nenhuma conversão de tipo explícito é necessária - também é válida e acontece para avaliar o mesmo timestamp que a função now() na maioria dos contextos . Mas essas são constantes e normalmente não o que você deseja como padrão de coluna, por exemplo.

    db<>fiddle aqui
    Velho sqlfiddle

    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 de recebimento da última mensagem de comando do cliente). retorna a
    clock_timestamp()hora atual real e, portanto, seu valor muda mesmo dentro de um único comando SQL.

    Nota: statement_timestamp()é STABLEcomo o acima (sempre retorna o mesmo valor dentro do mesmo comando SQL). Mas clock_timestamp()necessariamente é apenas VOLATILE. A diferença pode ser significativa.

    • 117
  2. Vao Tsun
    2016-12-10T08:49:43+08:002016-12-10T08:49:43+08:00

    Além de não terem diferença funcional quando você os usa corretamente, eles são lançados de forma diferente:

    'now()'reconhecido (como 'today'ou 'now'):

    b=# select 'now()'::timestamptz;
              timestamptz
    -------------------------------
     2016-12-09 16:31:35.942243+00
    (1 row)
    

    'CURRENT_TIMESTAMP'dá erro engraçado de bordas escuras

    Nota: A partir do PostgreSQL versão 7.2, 'current' não é mais suportado como uma constante de data/hora

    b=# select 'CURRENT_TIMESTAMP'::timestamptz;
    ERROR:  date/time value "current" is no longer supported
    LINE 1: select 'CURRENT_TIMESTAMP'::timestamptz;
                   ^
    

    e 'transaction_timestamp()'simplesmente não é recongized como timestamp com valor tz:

    b=# select 'transaction_timestamp()'::timestamptz;
    ERROR:  invalid input syntax for type timestamp with time zone: "transaction_timestamp()"
    LINE 1: select 'transaction_timestamp()'::timestamptz;
                   ^
    

    Por favor, não pergunte por que você lançaria 'now()' as timestamp. Eu vi where timestamp_column = 'now()'em vez de where timestamp_column = now()no código das pessoas, então pensei que esse esclarecimento seria um fato engraçado e uma boa adição à resposta de Erwin.

    • 2

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve