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

Jak funguje current_timestamp() v PostgreSQL

V PostgreSQL je to current_timestamp() funkce vrací aktuální datum a čas, včetně posunu časového pásma.

Vrácené časové razítko 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_timestamp
current_timestamp(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_timestamp;

Výsledek:

2020-07-01 15:42:35.630594+10

Příklad – Specifická přesnost

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

SELECT current_timestamp(0);

Výsledek:

2020-07-01 15:42:58+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_timestamp(3);

Výsledek:

2020-07-01 15:43:16.644+10

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 current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
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_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


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


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


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


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(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 
  current_timestamp,
  pg_sleep(5),
  current_timestamp,
  pg_sleep(5),
  current_timestamp;

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

current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+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_timestamp .

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. Prohledejte všechny tabulky, všechny sloupce pro konkrétní hodnotu SQL Server

  2. Odsazení vlevo v SQL Server – 3 ekvivalenty LPAD().

  3. MySQL parametrizované dotazy

  4. Příklady řetězců a čísel Oracle