W PostgreSQL localtimestamp()
funkcja zwraca lokalną datę i godzinę, bez przesunięcia strefy czasowej.
Jeśli potrzebujesz przesunięcia strefy czasowej, użyj current_timestamp()
zamiast tego.
Składnia
Możesz go użyć na jeden z następujących sposobów:
localtimestamp
localtimestamp(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 localtimestamp;
Wynik:
2020-07-01 15:55:48.039777
Przykład – konkretna precyzja
Oto przykład pokazujący, jak określić precyzję.
SELECT localtimestamp(0);
Wynik:
2020-07-01 15:56:02
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 localtimestamp(3);
Wynik:
2020-07-01 15:56:14.771
Transakcje
Rzeczywisty znacznik czasu 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 localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
SELECT pg_sleep(5);
SELECT localtimestamp;
COMMIT;
Oto pełne dane wyjściowe mojego terminala podczas wykonywania tej transakcji w 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
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
localtimestamp,
pg_sleep(5),
localtimestamp,
pg_sleep(5),
localtimestamp;
Wynik (przy użyciu wyjścia pionowego):
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
Wszystkie trzy wartości czasu są identyczne, mimo że pg_sleep()
funkcja została użyta do opóźnienia wykonania między każdym wywołaniem localtimestamp
.
Jest to w przeciwieństwie do clock_timestamp()
funkcja, która robi zmieniać się w miarę postępu w oświadczeniu.
W tym przykładzie 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
.