В PostgreSQL, localtimestamp()
функцията връща местната дата и час без изместване на часовата зона.
Ако имате нужда от изместване на часовата зона, използвайте current_timestamp()
вместо това.
Синтаксис
Можете да го използвате по един от следните начини:
localtimestamp
localtimestamp(x)
Където x
е незадължителен параметър за прецизност, който кара резултатът да бъде закръглен до x
брой дробни цифри в полето за секунди.
Без параметър за точност (първият синтаксис) резултатът се дава с пълната налична точност.
Пример – Пълна прецизност
Ето основен пример за демонстриране на резултат, използвайки пълната налична прецизност.
SELECT localtimestamp;
Резултат:
2020-07-01 15:55:48.039777
Пример – специфична прецизност
Ето пример, за да демонстрирате как да посочите точността.
SELECT localtimestamp(0);
Резултат:
2020-07-01 15:56:02
В този пример посочих точност от нула, което означава, че не са върнати частични секунди.
Ето още един пример, в който посочвам част от секунди.
SELECT localtimestamp(3);
Резултат:
2020-07-01 15:56:14.771
Транзакции
Действителното времеви печат се основава на началния час на текущата транзакция. Следователно тя не се променя с напредването на транзакцията.
Това позволява на една транзакция да има последователна представа за „текущото“ време, така че множеството модификации в рамките на една и съща транзакция да носят едно и също времеви печат.
Ето пример, който демонстрира това.
BEGIN;
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
COMMIT;
Ето пълния изход на моя терминал при изпълнение на тази транзакция в psql:
postgres=# BEGIN; BEGIN postgres=# SELECT localtimestamp; localtimestamp -------------------------- 2020-07-02 09:25:38.3858 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT localtimestamp; localtimestamp -------------------------- 2020-07-02 09:25:38.3858 (1 row) postgres=# SELECT pg_sleep(5); pg_sleep ---------- (1 row) postgres=# SELECT localtimestamp; localtimestamp -------------------------- 2020-07-02 09:25:38.3858 (1 row) postgres=# COMMIT; COMMIT
И трите времеви стойности са идентични, въпреки че pg_sleep()
функцията беше използвана за забавяне на изпълнението между всеки израз в транзакцията.
Това е в контраст с statement_timestamp()
което прави променяйте с всяко изявление.
Множество обаждания в рамките на изявление
Освен това не се променя с напредването на изявлението.
\x
SELECT
localtimestamp,
pg_sleep(5),
localtimestamp,
pg_sleep(5),
localtimestamp;
Резултат (с помощта на вертикален изход):
localtimestamp | 2020-07-02 09:26:46.743801 pg_sleep | localtimestamp | 2020-07-02 09:26:46.743801 pg_sleep | localtimestamp | 2020-07-02 09:26:46.743801
И трите времеви стойности са идентични, въпреки че pg_sleep()
функцията беше използвана за забавяне на изпълнението между всяко извикване на localtimestamp
.
Това е в контраст с clock_timestamp()
функция, която прави променяйте, докато преминава през изявлението.
В този пример използвах вертикален изход (известен също като разширен изход), за да направя резултатите малко по-компактни.
Можете да превключвате разширения изход в psql с помощта на \x
.