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

Jak działa current_timestamp() w PostgreSQL

W PostgreSQL current_timestamp() funkcja zwraca bieżącą datę i godzinę, w tym przesunięcie strefy czasowej.

Zwracany znacznik czasu 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_timestamp
current_timestamp(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_timestamp;

Wynik:

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

Przykład – konkretna precyzja

Oto przykład pokazujący, jak określić precyzję.

SELECT current_timestamp(0);

Wynik:

2020-07-01 15:42:58+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_timestamp(3);

Wynik:

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

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 current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
SELECT pg_sleep(5);
SELECT current_timestamp;
COMMIT;

Oto pełne dane wyjściowe mojego terminala podczas wykonywania tej transakcji w 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

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_timestamp,
  pg_sleep(5),
  current_timestamp,
  pg_sleep(5),
  current_timestamp;

Wynik (przy użyciu wyjścia pionowego):

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

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 current_timestamp .

Jest to w przeciwieństwie do clock_timestamp() funkcja, która robi zmieniać się w miarę postępu 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. Postgres to najfajniejsza baza danych – Powód #2:Licencja

  2. Jak działa Acosh() w PostgreSQL

  3. dynamiczne postgres zapytania

  4. Heroku pg:pociągnięcie nie powiodło się wypełnienie schematu

  5. pgFincore 1.2, rozszerzenie PostgreSQL