W PostgreSQL current_time
funkcja zwraca aktualny czas, w tym przesunięcie strefy czasowej.
Zwrócony czas jest oparty na czasie rozpoczęcia bieżącej transakcji.
Składnia
Możesz go użyć na jeden z następujących sposobów:
current_time
current_time(x)
Gdzie x
jest opcjonalnym parametrem precyzji, który powoduje zaokrąglenie wyniku do x
liczba cyfr ułamkowych w polu sekund.
Bez parametru precyzji (pierwsza składnia) wynik jest podawany z pełną dostępną precyzją.
Przykład – pełna precyzja
Oto podstawowy przykład demonstrujący wynik z pełną dostępną precyzją.
SELECT current_time;
Wynik:
14:33:30.731384+10
Przykład – konkretna precyzja
Oto przykład pokazujący, jak określić precyzję.
SELECT current_time(0);
Wynik:
15:35:38+10
W tym przykładzie określiłem precyzję zero, co oznacza, że nie zostały zwrócone żadne ułamki sekund.
Oto kolejny przykład, w którym określam liczbę ułamków sekund.
SELECT current_time(3);
Wynik:
15:37:43.385+10
Transakcje
Rzeczywisty czas jest oparty na czasie rozpoczęcia bieżącej transakcji. Dlatego nie zmienia się wraz z postępem transakcji.
Dzięki temu pojedyncza transakcja ma spójne pojęcie „bieżącego” czasu, dzięki czemu wiele modyfikacji w ramach tej samej transakcji ma ten sam znacznik czasu.
Oto przykład, który to pokazuje.
BEGIN;
SELECT current_time;
SELECT pg_sleep(5);
SELECT current_time;
SELECT pg_sleep(5);
SELECT current_time;
COMMIT;
Oto pełne dane wyjściowe mojego terminala podczas wykonywania tej transakcji w 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
Wszystkie trzy wartości czasu są identyczne, mimo że pg_sleep()
funkcja została użyta do opóźnienia wykonania pomiędzy każdym wyciągiem w ramach transakcji.
Jest to w przeciwieństwie do statement_timestamp()
co robi zmieniać się z każdym stwierdzeniem.
Wiele połączeń w wyciągu
Nie zmienia się również w miarę postępów w oświadczeniu.
\x
SELECT
current_time,
pg_sleep(5),
current_time,
pg_sleep(5),
current_time;
Wynik (przy użyciu wyjścia pionowego):
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
Wszystkie trzy wartości czasu są identyczne, mimo że pg_sleep()
funkcja została użyta do opóźnienia wykonania pomiędzy każdym wywołaniem current_time
.
Jest to w przeciwieństwie do clock_timestamp()
funkcja, która robi zmieniać się w miarę postępów w oświadczeniu.
Nawiasem mówiąc, użyłem wyjścia pionowego (znanego również jako wyjście rozszerzone), aby wyniki były nieco bardziej zwarte.
Możesz przełączać rozwinięte wyjście w psql za pomocą \x
.