PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak działa current_time w PostgreSQL

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 .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak sprawdzić wersję PostgreSQL

  2. Konfiguracja klastra Puma w Heroku

  3. Ograniczenie NOT NULL na zbiorze kolumn

  4. Generowanie danych i jakość sprzętu

  5. Jak skonfigurować zdalne połączenie z PostgreSQL