V PostgreSQL je to statement_timestamp()
funkce vrací aktuální datum a čas (včetně posunu časového pásma) na začátku aktuálního příkazu.
Funkce nepřijímá žádné parametry, takže nemůžete určit její přesnost.
Také statement_timestamp()
je nestandardní funkce SQL.
Syntaxe
Syntaxe vypadá takto:
statement_timestamp()
Nejsou vyžadovány ani přijímány žádné argumenty.
Základní příklad
Zde je základní příklad k demonstraci.
SELECT statement_timestamp();
Výsledek:
2020-07-02 09:30:45.46903+10
V rámci transakce
Zde je příklad demonstrující, jak to funguje v rámci transakce.
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;
Zde je úplný výstup v mém terminálu při použití psql:
postgres=# BEGIN; BEGIN postgres=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2020-07-02 09:31:13.363128+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2020-07-02 09:31:18.424503+10 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT statement_timestamp(); statement_timestamp ------------------------------- 2020-07-02 09:31:23.501539+10 (1 row) postgres=# COMMIT; COMMIT
V tomto příkladu jsem použil pg_sleep()
funkce pro zpoždění provádění mezi jednotlivými příkazy.
Protože každý statement_timestamp()
volání bylo ve vlastním příkazu SQL, vrácené časové razítko se u každého volání lišilo.
To je v kontrastu s transaction_timestamp()
, což není měnit s každým prohlášením. Vrátí své časové razítko na základě času zahájení transakce.
Více hovorů v rámci výpisu
Zde je příklad toho, co se stane, když zkombinujeme všechna tři volání funkcí do jednoho příkazu SQL.
\x
SELECT
statement_timestamp(),
pg_sleep(5),
statement_timestamp(),
pg_sleep(5),
statement_timestamp();
Výsledek (při použití vertikálního výstupu):
statement_timestamp | 2020-07-02 09:34:41.06911+10 pg_sleep | statement_timestamp | 2020-07-02 09:34:41.06911+10 pg_sleep | statement_timestamp | 2020-07-02 09:34:41.06911+10
Tentokrát jsou všechny tři hodnoty časového razítka totožné, i když pg_sleep()
funkce byla použita ke zpoždění provádění mezi každým voláním statement_timestamp()
.
To je v kontrastu s clock_timestamp()
funkce, která se mění, i když postupuje příkazem (pokud je v příkazu volána vícekrát).