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

Como statement_timestamp() funciona no PostgreSQL


No PostgreSQL, o statement_timestamp() A função retorna a data e hora atuais (incluindo o deslocamento de fuso horário), no início da instrução atual.

A função não aceita nenhum parâmetro, então você não pode especificar sua precisão.

Além disso, statement_timestamp() é uma função não padrão SQL.

Sintaxe


A sintaxe fica assim:
statement_timestamp()

Nenhum argumento é necessário ou aceito.

Exemplo básico


Aqui está um exemplo básico para demonstrar.
SELECT statement_timestamp();

Resultado:
2020-07-02 09:30:45.46903+10

Dentro de uma transação


Aqui está um exemplo para demonstrar como funciona dentro de uma transação.
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;

Aqui está a saída completa dentro do meu terminal ao usar o psql:
postgres=# BEGIN;
BEGIN
postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:13.363128+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:18.424503+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:23.501539+10
(1 row)


postgres=# COMMIT;
COMMIT

Neste exemplo eu usei o pg_sleep() função para atrasar a execução entre cada instrução.

Porque cada statement_timestamp() call estava em sua própria instrução SQL, o timestamp retornado era diferente com cada chamada.

Isso contrasta com transaction_timestamp() , que não mudar a cada afirmação. Ele retorna seu carimbo de data/hora com base na hora de início da transação.

Várias chamadas em um extrato


Aqui está um exemplo do que acontece se combinarmos todas as três chamadas de função em uma única instrução SQL.
\x
SELECT 
  statement_timestamp(),
  pg_sleep(5),
  statement_timestamp(),
  pg_sleep(5),
  statement_timestamp();

Resultado (usando saída vertical):
statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10

Desta vez, todos os três valores de timestamp são idênticos, mesmo que o pg_sleep() função foi usada para atrasar a execução entre cada chamada para statement_timestamp() .

Isso contrasta com o clock_timestamp() função, que muda mesmo à medida que progride na instrução (se chamada várias vezes dentro da instrução).