PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как statement_timestamp() работи в PostgreSQL

В 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() функция, която се променя дори с напредването си през оператора (ако се извиква няколко пъти в рамките на оператора).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Намерете припокриващи се периоди от време в PostgreSQL

  2. Как работи IsFinite() в PostgreSQL

  3. Вземете броя на дните в месеца в PostgreSQL

  4. Сортиране на нулеви стойности след всички останали, с изключение на специални

  5. Грешка при картографиране на postgres масиви в Spring JPA