V PostgreSQL je to now() funkce vrací aktuální datum a čas (včetně posunu časového pásma) na začátku aktuální transakce.
Je to ekvivalent transaction_timestamp() funkce.
Je také podobný current_timestamp funkce (při volání bez argumentu).
now() funkce nepřijímá žádné parametry, takže nemůžete určit její přesnost, zatímco current_timestamp lze volat s parametrem přesnosti nebo bez něj.
Také now() je nestandardní SQL (stejně jako transaction_timestamp() funkce).
Syntaxe
Syntaxe vypadá takto:
now() Nejsou vyžadovány ani přijímány žádné argumenty.
Základní příklad
Zde je základní příklad k demonstraci.
SELECT now(); Výsledek:
2020-07-02 09:51:12.088506+10
V rámci transakce
Zde je příklad demonstrující, jak to funguje v rámci transakce.
BEGIN;
SELECT now();
SELECT pg_sleep(5);
SELECT now();
SELECT pg_sleep(5);
SELECT now();
COMMIT; Zde je úplný výstup v mém terminálu při použití psql:
postgres=# BEGIN; BEGIN postgres=# SELECT now(); now ------------------------------- 2020-07-02 09:51:53.905091+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT now(); now ------------------------------- 2020-07-02 09:51:53.905091+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT now(); now ------------------------------- 2020-07-02 09:51:53.905091+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 každým voláním now() , z nichž každý byl náhodou ve svém vlastním příkazu SQL.
Můžeme tedy vidět, že čas vrácený pro každý výpis je založen na počátečním čase aktuální transakce – nikoli na výpisu. V průběhu transakce se 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.
Více hovorů v rámci výpisu
Nemění se ani v průběhu výpisu.
\x
SELECT
now(),
pg_sleep(5),
now(),
pg_sleep(5),
now(); Výsledek (při použití vertikálního výstupu):
now | 2020-07-02 09:53:33.766806+10 pg_sleep | now | 2020-07-02 09:53:33.766806+10 pg_sleep | now | 2020-07-02 09:53:33.766806+10
Opět platí, že všechny tři časové hodnoty jsou totožné, i když pg_sleep() funkce byla použita ke zpoždění provedení mezi každým voláním now() .
To je v kontrastu s statement_timestamp() , což dělá měnit s každým příkazem a také clock_timestamp() funkce, která se mění, i když postupuje každým příkazem (pokud je v rámci příkazu volána vícekrát).