I PostgreSQL, statement_timestamp()
funktion returnerar aktuellt datum och tid (inklusive tidszonsförskjutningen), i början av den aktuella satsen.
Funktionen accepterar inga parametrar, så du kan inte specificera dess precision.
Även statement_timestamp()
är en icke-SQL-standardfunktion.
Syntax
Syntaxen ser ut så här:
statement_timestamp()
Inga argument krävs eller accepteras.
Grundläggande exempel
Här är ett grundläggande exempel att visa.
SELECT statement_timestamp();
Resultat:
2020-07-02 09:30:45.46903+10
Inom en transaktion
Här är ett exempel för att visa hur det fungerar inom en transaktion.
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;
Här är hela resultatet i min terminal när jag använder 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
I det här exemplet använde jag pg_sleep()
funktion för att fördröja exekvering mellan varje sats.
Eftersom varje statement_timestamp()
anropet fanns i sin egen SQL-sats, den returnerade tidsstämpeln var olika för varje anrop.
Detta är i motsats till transaction_timestamp()
, vilket inte gör ändra med varje påstående. Den returnerar sin tidsstämpel baserat på starttiden för transaktionen.
Flera samtal inom ett kontoutdrag
Här är ett exempel på vad som händer om vi kombinerar alla tre funktionsanrop i en enda SQL-sats.
\x
SELECT
statement_timestamp(),
pg_sleep(5),
statement_timestamp(),
pg_sleep(5),
statement_timestamp();
Resultat (med vertikal utdata):
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
Den här gången är alla tre tidsstämpelvärdena identiska, även om pg_sleep()
funktion användes för att fördröja exekvering mellan varje anrop till statement_timestamp()
.
Detta står i kontrast till clock_timestamp()
funktion, som ändras även när den fortskrider genom satsen (om den anropas flera gånger i satsen).