V PostgreSQL current_time
funkce vrací aktuální čas, včetně posunu časového pásma.
Vrácený čas vychází z času zahájení aktuální transakce.
Syntaxe
Můžete jej použít jedním z následujících způsobů:
current_time
current_time(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 current_time;
Výsledek:
14:33:30.731384+10
Příklad – Specifická přesnost
Zde je příklad, který demonstruje, jak určit přesnost.
SELECT current_time(0);
Výsledek:
15:35:38+10
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 current_time(3);
Výsledek:
15:37:43.385+10
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 current_time;
SELECT pg_sleep(5);
SELECT current_time;
SELECT pg_sleep(5);
SELECT current_time;
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 current_time; current_time -------------------- 09:09:27.524852+10 (1 row) postgres=# SELECT pg_sleep(5); SELECT current_time; SELECT pg_sleep(5); SELECT current_time; COMMIT; pg_sleep ---------- (1 row) postgres=# SELECT current_time; current_time -------------------- 09:09:27.524852+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT current_time; current_time -------------------- 09:09:27.524852+10 (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
current_time,
pg_sleep(5),
current_time,
pg_sleep(5),
current_time;
Výsledek (při použití vertikálního výstupu):
current_time | 09:11:16.09445+10 pg_sleep | current_time | 09:11:16.09445+10 pg_sleep | current_time | 09:11:16.09445+10
Všechny tři časové hodnoty jsou stejné, i když pg_sleep()
funkce byla použita ke zpoždění spuštění mezi každým voláním current_time
.
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 (také známý 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
.