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

Jak funguje current_time v PostgreSQL

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 .


  1. Deklarování a nastavení proměnných v příkazu Select

  2. Jak změnit výchozí profil pošty databáze pro uživatele v SQL Server (T-SQL)

  3. FieldShield SDK

  4. kontingenční tabulka Oracle - jak změnit položky řádků na sloupce