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

Как работи current_time в PostgreSQL

В PostgreSQL, current_time функцията връща текущото време, включително изместването на часовата зона.

Върнатото време се основава на началния час на текущата транзакция.

Синтаксис

Можете да го използвате по един от следните начини:

current_time
current_time(x)

Където x е незадължителен параметър за прецизност, който кара резултатът да бъде закръглен до x брой дробни цифри в полето за секунди.

Без параметър за точност (първият синтаксис) резултатът се дава с пълната налична точност.

Пример – Пълна прецизност

Ето основен пример за демонстриране на резултат, използвайки пълната налична прецизност.

SELECT current_time;

Резултат:

14:33:30.731384+10

Пример – специфична прецизност

Ето пример, за да демонстрирате как да посочите точността.

SELECT current_time(0);

Резултат:

15:35:38+10

В този пример посочих точност от нула, което означава, че не са върнати частични секунди.

Ето още един пример, в който посочвам част от секундите.

SELECT current_time(3);

Резултат:

15:37:43.385+10

Транзакции

Действителното време се основава на началния час на текущата транзакция. Следователно тя не се променя с напредването на транзакцията.

Това позволява на една транзакция да има последователна представа за „текущото“ време, така че множеството модификации в рамките на една и съща транзакция да носят едно и също времеви печат.

Ето пример, който демонстрира това.

BEGIN;
SELECT current_time;
SELECT pg_sleep(5);
SELECT current_time;
SELECT pg_sleep(5);
SELECT current_time;
COMMIT;

Ето пълния изход на моя терминал при изпълнение на тази транзакция в psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT current_time;
    current_time    
--------------------
 09:09:27.524852+10
(1 row)


postgres=# SELECT pg_sleep(5);
SELECT current_time;
SELECT pg_sleep(5);
SELECT current_time;
COMMIT;
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT current_time;
    current_time    
--------------------
 09:09:27.524852+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT current_time;
    current_time    
--------------------
 09:09:27.524852+10
(1 row)


postgres=# COMMIT;
COMMIT

И трите времеви стойности са идентични, въпреки че pg_sleep() функцията беше използвана за забавяне на изпълнението между всеки израз в транзакцията.

Това е в контраст с statement_timestamp() което прави променяйте с всяко изявление.

Множество обаждания в рамките на изявление

Освен това не се променя с напредването на изявлението.

\x
SELECT 
  current_time,
  pg_sleep(5),
  current_time,
  pg_sleep(5),
  current_time;

Резултат (с помощта на вертикален изход):

current_time | 09:11:16.09445+10
pg_sleep     | 
current_time | 09:11:16.09445+10
pg_sleep     | 
current_time | 09:11:16.09445+10

И трите времеви стойности са идентични, въпреки че pg_sleep() функцията беше използвана за забавяне на изпълнението между всяко извикване на current_time .

Това е в контраст с clock_timestamp() функция, която прави променяйте, докато преминава през изявлението.

Между другото, използвах вертикален изход (известен също като разширен изход), за да направя резултатите малко по-компактни.

Можете да превключвате разширения изход в psql с помощта на \x .


  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 VACUUM and ANALYZE

  2. Как да получите текущата дата и час (без часова зона) в PostgreSQL

  3. Съвети за внедряване на хибриден облак на PostgreSQL

  4. Как да направя слушател на база данни с java?

  5. PHP не зарежда php_pgsql.dll в Windows