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

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

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

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

Синтаксис

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

current_timestamp
current_timestamp(x)

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

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

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

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

SELECT current_timestamp;

Резултат:

2020-07-01 15:42:35.630594+10

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

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

SELECT current_timestamp(0);

Резултат:

2020-07-01 15:42:58+10

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

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

SELECT current_timestamp(3);

Резултат:

2020-07-01 15:43:16.644+10

Транзакции

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

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

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

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

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

postgres=# BEGIN;
BEGIN
postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


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


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


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


postgres=# SELECT current_timestamp;
       current_timestamp       
-------------------------------
 2020-07-02 09:02:52.952669+10
(1 row)


postgres=# COMMIT;
COMMIT

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

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

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

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

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

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

current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10
pg_sleep          | 
current_timestamp | 2020-07-02 09:04:03.413062+10

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

Това е в контраст с 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. Heroku pg:pull неуспешно попълване на схемата

  2. Изпълнявайте отложен тригер само веднъж на ред в PostgreSQL

  3. Django:разрешение е отказано при опит за достъп до база данни след възстановяване (миграция)

  4. Сравняване на временни таблици за PostgreSQL и Oracle GTT

  5. Как pgBouncer помага за ускоряване на Django