In PostgreSQL, de statement_timestamp()
functie retourneert de huidige datum en tijd (inclusief de tijdzone-offset), aan het begin van de huidige instructie.
De functie accepteert geen parameters, dus u kunt de precisie ervan niet specificeren.
Ook statement_timestamp()
is een niet-SQL-standaard functie.
Syntaxis
De syntaxis gaat als volgt:
statement_timestamp()
Er zijn geen argumenten vereist of geaccepteerd.
Basisvoorbeeld
Hier is een eenvoudig voorbeeld om te demonstreren.
SELECT statement_timestamp();
Resultaat:
2020-07-02 09:30:45.46903+10
Binnen een transactie
Hier is een voorbeeld om te laten zien hoe het werkt binnen een transactie.
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;
Hier is de volledige uitvoer in mijn terminal bij gebruik van 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
In dit voorbeeld gebruikte ik de pg_sleep()
functie om de uitvoering tussen elke instructie te vertragen.
Omdat elke statement_timestamp()
aanroep stond in zijn eigen SQL-instructie, de geretourneerde tijdstempel was bij elke aanroep anders.
Dit in tegenstelling tot transaction_timestamp()
, wat niet veranderen bij elke uitspraak. Het geeft zijn tijdstempel terug op basis van de starttijd van de transactie.
Meerdere oproepen binnen een verklaring
Hier is een voorbeeld van wat er gebeurt als we alle drie functieaanroepen combineren in één SQL-instructie.
\x
SELECT
statement_timestamp(),
pg_sleep(5),
statement_timestamp(),
pg_sleep(5),
statement_timestamp();
Resultaat (met verticale uitvoer):
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
Deze keer zijn alle drie de tijdstempelwaarden identiek, hoewel de pg_sleep()
functie werd gebruikt om de uitvoering te vertragen tussen elke aanroep naar statement_timestamp()
.
Dit in tegenstelling tot de clock_timestamp()
functie, die verandert zelfs als het door de instructie gaat (indien meerdere keren aangeroepen binnen de instructie).