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

Como LocalTimeStamp() funciona no PostgreSQL


No PostgreSQL, o localtimestamp() A função retorna a data e a hora locais, sem o deslocamento de fuso horário.

Se você precisar do deslocamento de fuso horário, use current_timestamp() em vez de.

Sintaxe


Você pode usá-lo de uma das seguintes maneiras:
localtimestamp
localtimestamp(x)

Onde x é um parâmetro de precisão opcional, que faz com que o resultado seja arredondado para x número de dígitos fracionários no campo de segundos.

Sem um parâmetro de precisão (a primeira sintaxe), o resultado é fornecido com a precisão total disponível.

Exemplo – Precisão total


Aqui está um exemplo básico para demonstrar um resultado usando a precisão total disponível.
SELECT localtimestamp;

Resultado:
2020-07-01 15:55:48.039777

Exemplo – Precisão Específica


Aqui está um exemplo para demonstrar como especificar a precisão.
SELECT localtimestamp(0);

Resultado:
2020-07-01 15:56:02

Neste exemplo, especifiquei uma precisão de zero, o que significa que nenhum segundo fracionário foi retornado.

Aqui está outro exemplo em que especifico um número de segundos fracionários.
SELECT localtimestamp(3);

Resultado:
2020-07-01 15:56:14.771

Transações


O carimbo de data/hora real é baseado na hora de início da transação atual. Portanto, ele não muda à medida que a transação avança.

Isso permite que uma única transação tenha uma noção consistente da hora “atual”, de modo que várias modificações na mesma transação tenham o mesmo carimbo de hora.

Aqui está um exemplo que demonstra isso.
BEGIN;
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
COMMIT;

Aqui está a saída completa do meu terminal ao executar essa transação no psql:
postgres=# BEGIN;
BEGIN
postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


postgres=# COMMIT;
COMMIT

Todos os três valores de tempo são idênticos, embora o pg_sleep() A função era usada para atrasar a execução entre cada instrução dentro da transação.

Isso contrasta com statement_timestamp() o que faz mudar a cada afirmação.

Várias chamadas em um extrato


Também não muda à medida que a declaração progride.
\x
SELECT 
  localtimestamp,
  pg_sleep(5),
  localtimestamp,
  pg_sleep(5),
  localtimestamp;

Resultado (usando saída vertical):
localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801

Todos os três valores de tempo são idênticos, embora o pg_sleep() função foi usada para atrasar a execução entre cada chamada para localtimestamp .

Isso contrasta com o clock_timestamp() função, que faz mudar à medida que progride através da declaração.

Neste exemplo, usei a saída vertical (também conhecida como saída expandida) para tornar os resultados um pouco mais compactos.

Você pode alternar a saída expandida no psql usando \x .