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

Jak LocalTime() funguje v PostgreSQL

V PostgreSQL je to localtime funkce vrací místní čas dne bez posunu časového pásma.

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

Syntaxe

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

localtime
localtime(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 localtime;

Výsledek:

15:50:25.314626

Příklad – Specifická přesnost

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

SELECT localtime(0);

Výsledek:

15:50:44

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 localtime(3);

Výsledek:

15:50:59.039

Transakce

Skutečný čas 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 localtime;
SELECT pg_sleep(5);
SELECT localtime;
SELECT pg_sleep(5);
SELECT localtime;
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 localtime;
    localtime    
-----------------
 09:22:40.096909
(1 row)


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


postgres=# SELECT localtime;
    localtime    
-----------------
 09:22:40.096909
(1 row)


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


postgres=# SELECT localtime;
    localtime    
-----------------
 09:22:40.096909
(1 row)


postgres=# COMMIT;
COMMIT

Všechny tři časové hodnoty jsou identické, 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 
  localtime,
  pg_sleep(5),
  localtime,
  pg_sleep(5),
  localtime;

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

localtime | 09:23:45.108559
pg_sleep  | 
localtime | 09:23:45.108559
pg_sleep  | 
localtime | 09:23:45.108559

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

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

Mimochodem, použil jsem 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. Použijte textový výstup z funkce jako nový dotaz

  2. Výpadky s EMCLI

  3. Jak mohu pomocí MySQL dotazovat mezi dvěma daty?

  4. Jak vytvořit dotaz bez ohledu na velikost písmen v Postgresql?