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).