sql >> Databáze >  >> RDS >> PostgreSQL

Jak LocalTimeStamp() funguje v PostgreSQL

V PostgreSQL je to localtimestamp() funkce vrací místní datum a čas bez posunu časového pásma.

Pokud potřebujete posun časového pásma, použijte current_timestamp() místo toho.

Syntaxe

Můžete jej použít jedním z následujících způsobů:

localtimestamp
localtimestamp(x)

Kde x je volitelný parametr přesnosti, který způsobí zaokrouhlení výsledku na x počet desetinných číslic v poli sekund.

Bez parametru přesnosti (první syntaxe) je výsledek dán s plnou dostupnou přesností.

Příklad – Úplná přesnost

Zde je základní příklad pro předvedení výsledku s plnou dostupnou přesností.

SELECT localtimestamp;

Výsledek:

2020-07-01 15:55:48.039777

Příklad – Specifická přesnost

Zde je příklad, který demonstruje, jak určit přesnost.

SELECT localtimestamp(0);

Výsledek:

2020-07-01 15:56:02

V tomto příkladu jsem zadal přesnost nula, což znamená, že nebyly vráceny žádné zlomky sekund.

Zde je další příklad, kde zadávám počet zlomkových sekund.

SELECT localtimestamp(3);

Výsledek:

2020-07-01 15:56:14.771

Transakce

Skutečné časové razítko vychází z času zahájení aktuální transakce. Proto se v průběhu transakce nemění.

To umožňuje, aby jedna transakce měla konzistentní představu o „aktuálním“ čase, takže více úprav v rámci stejné transakce nese stejný časový údaj.

Zde je příklad, který to demonstruje.

BEGIN;
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
COMMIT;

Zde je úplný výstup mého terminálu při provádění této transakce v 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

Všechny tři časové hodnoty jsou stejné, i když pg_sleep() funkce byla použita ke zpoždění provedení mezi jednotlivými příkazy v rámci transakce.

To je v kontrastu s statement_timestamp() což dělá měnit s každým příkazem.

Více hovorů v rámci výpisu

Nemění se ani v průběhu výpisu.

\x
SELECT 
  localtimestamp,
  pg_sleep(5),
  localtimestamp,
  pg_sleep(5),
  localtimestamp;

Výsledek (při použití vertikálního výstupu):

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

Všechny tři časové hodnoty jsou stejné, i když pg_sleep() funkce byla použita ke zpoždění provedení mezi každým voláním localtimestamp .

To je v kontrastu s clock_timestamp() funkci, kterou dělá změnit, jak postupuje příkazem.

V tomto příkladu jsem použil vertikální výstup (známý také jako rozšířený výstup), aby byly výsledky o něco kompaktnější.

Rozšířený výstup v psql můžete přepínat pomocí \x .


  1. Analyzujte JSON v TSQL

  2. Modelování základní datové struktury pro správu uživatelů, vláken a příspěvků

  3. Odstranění výchozí stopy – část 3

  4. Nový způsob, jak si přizpůsobit sledování PostgreSQL pomocí Prometheus