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

Jak działa statement_timestamp() w PostgreSQL

W PostgreSQL statement_timestamp() funkcja zwraca bieżącą datę i godzinę (włącznie z przesunięciem strefy czasowej), na początku bieżącej instrukcji.

Funkcja nie przyjmuje żadnych parametrów, więc nie możesz określić jej precyzji.

Ponadto statement_timestamp() jest funkcją inną niż standardowa SQL.

Składnia

Składnia wygląda tak:

statement_timestamp()

Żadne argumenty nie są wymagane ani akceptowane.

Przykład podstawowy

Oto podstawowy przykład do zademonstrowania.

SELECT statement_timestamp();

Wynik:

2020-07-02 09:30:45.46903+10

W ramach transakcji

Oto przykład pokazujący, jak to działa w ramach transakcji.

BEGIN;
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
SELECT pg_sleep(5);
SELECT statement_timestamp();
COMMIT;

Oto pełne dane wyjściowe w moim terminalu podczas korzystania z psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:13.363128+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:18.424503+10
(1 row)


postgres=# SELECT pg_sleep(5);
 pg_sleep 
----------
 
(1 row)


postgres=# SELECT statement_timestamp();
      statement_timestamp      
-------------------------------
 2020-07-02 09:31:23.501539+10
(1 row)


postgres=# COMMIT;
COMMIT

W tym przykładzie użyłem pg_sleep() funkcja opóźnienia wykonania między każdą instrukcją.

Ponieważ każda statement_timestamp() wywołanie było we własnej instrukcji SQL, zwracany znacznik czasu był inny przy każdym wywołaniu.

Jest to w przeciwieństwie do transaction_timestamp() , czego nie zmieniać się z każdym stwierdzeniem. Zwraca swój znacznik czasu na podstawie czasu rozpoczęcia transakcji.

Wiele połączeń w wyciągu

Oto przykład tego, co się stanie, jeśli połączymy wszystkie trzy wywołania funkcji w ramach jednej instrukcji SQL.

\x
SELECT 
  statement_timestamp(),
  pg_sleep(5),
  statement_timestamp(),
  pg_sleep(5),
  statement_timestamp();

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

statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10
pg_sleep            | 
statement_timestamp | 2020-07-02 09:34:41.06911+10

Tym razem wszystkie trzy wartości znaczników czasu są identyczne, mimo że pg_sleep() funkcja została użyta do opóźnienia wykonania między każdym wywołaniem statement_timestamp() .

Jest to sprzeczne z clock_timestamp() funkcja, która zmienia się nawet w miarę postępu w instrukcji (jeśli jest wywoływana wiele razy w instrukcji).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ustawienie nazwa_aplikacji w Postgres/SQLAlchemy

  2. Skopiuj strukturę tabeli do nowej tabeli

  3. Przekonwertować dostęp do PostgreSQL?

  4. Jak uzyskać licznik niedzieli w bieżącym miesiącu w psql?

  5. Jaka jest równoważna składnia PostgreSQL dla Oracle CONNECT BY ... START WITH?