В PostgreSQL, statement_timestamp()
функцията връща текущата дата и час (включително отместването на часовата зона) в началото на текущия оператор.
Функцията не приема никакви параметри, така че не можете да посочите нейната точност.
Също така, statement_timestamp()
е нестандартна функция за SQL.
Синтаксис
Синтаксисът е така:
statement_timestamp()
Не се изискват или приемат аргументи.
Основен пример
Ето основен пример за демонстрация.
SELECT statement_timestamp();
Резултат:
2020-07-02 09:30:45.46903+10
В рамките на транзакция
Ето пример, за да демонстрирате как работи в рамките на транзакция.
BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;
Ето пълния изход в моя терминал, когато използвам 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
В този пример използвах pg_sleep()
функция за забавяне на изпълнението между всеки израз.
Тъй като всеки statement_timestamp()
call е в собствен SQL израз, върнатата времева марка е различна при всяко повикване.
Това е в контраст с transaction_timestamp()
, което не променяйте с всяко изявление. Той връща клеймото си за време въз основа на началния час на транзакцията.
Множество обаждания в рамките на изявление
Ето пример за това какво се случва, ако комбинираме и трите извиквания на функции в рамките на един SQL израз.
\x
SELECT
statement_timestamp(),
pg_sleep(5),
statement_timestamp(),
pg_sleep(5),
statement_timestamp();
Резултат (с помощта на вертикален изход):
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
Този път и трите стойности на времеви отпечатъци са идентични, въпреки че pg_sleep()
функцията беше използвана за забавяне на изпълнението между всяко извикване на statement_timestamp()
.
Това е в контраст с clock_timestamp()
функция, която се променя дори с напредването си през оператора (ако се извиква няколко пъти в рамките на оператора).