W PostgreSQL statement_timestamp()
funkcja zwraca bieżącą datę i godzinę (włącznie z przesunięciem strefy czasowej), na początku bieżącej instrukcji.
Funkcja nie przyjmuje żadnych parametrów, więc nie możesz określić jej precyzji.
Ponadto statement_timestamp()
jest funkcją inną niż standardowa SQL.
Składnia
Składnia wygląda tak:
statement_timestamp()
Żadne argumenty nie są wymagane ani akceptowane.
Przykład podstawowy
Oto podstawowy przykład do zademonstrowania.
SELECT statement_timestamp();
Wynik:
2020-07-02 09:30:45.46903+10
W ramach transakcji
Oto przykład pokazujący, jak to działa w ramach transakcji.
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;
Oto pełne dane wyjściowe w moim terminalu podczas korzystania z 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
W tym przykładzie użyłem pg_sleep()
funkcja opóźnienia wykonania między każdą instrukcją.
Ponieważ każda statement_timestamp()
wywołanie było we własnej instrukcji SQL, zwracany znacznik czasu był inny przy każdym wywołaniu.
Jest to w przeciwieństwie do transaction_timestamp()
, czego nie zmieniać się z każdym stwierdzeniem. Zwraca swój znacznik czasu na podstawie czasu rozpoczęcia transakcji.
Wiele połączeń w wyciągu
Oto przykład tego, co się stanie, jeśli połączymy wszystkie trzy wywołania funkcji w ramach jednej instrukcji SQL.
\x
SELECT
statement_timestamp(),
pg_sleep(5),
statement_timestamp(),
pg_sleep(5),
statement_timestamp();
Wynik (przy użyciu wyjścia pionowego):
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
Tym razem wszystkie trzy wartości znaczników czasu są identyczne, mimo że pg_sleep()
funkcja została użyta do opóźnienia wykonania między każdym wywołaniem statement_timestamp()
.
Jest to sprzeczne z clock_timestamp()
funkcja, która zmienia się nawet w miarę postępu w instrukcji (jeśli jest wywoływana wiele razy w instrukcji).