sql >> Database >  >> RDS >> PostgreSQL

Hoe statement_timestamp() werkt in PostgreSQL

In PostgreSQL, de statement_timestamp() functie retourneert de huidige datum en tijd (inclusief de tijdzone-offset), aan het begin van de huidige instructie.

De functie accepteert geen parameters, dus u kunt de precisie ervan niet specificeren.

Ook statement_timestamp() is een niet-SQL-standaard functie.

Syntaxis

De syntaxis gaat als volgt:

statement_timestamp()

Er zijn geen argumenten vereist of geaccepteerd.

Basisvoorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren.

SELECT statement_timestamp();

Resultaat:

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

Binnen een transactie

Hier is een voorbeeld om te laten zien hoe het werkt binnen een transactie.

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

Hier is de volledige uitvoer in mijn terminal bij gebruik van 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

In dit voorbeeld gebruikte ik de pg_sleep() functie om de uitvoering tussen elke instructie te vertragen.

Omdat elke statement_timestamp() aanroep stond in zijn eigen SQL-instructie, de geretourneerde tijdstempel was bij elke aanroep anders.

Dit in tegenstelling tot transaction_timestamp() , wat niet veranderen bij elke uitspraak. Het geeft zijn tijdstempel terug op basis van de starttijd van de transactie.

Meerdere oproepen binnen een verklaring

Hier is een voorbeeld van wat er gebeurt als we alle drie functieaanroepen combineren in één SQL-instructie.

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

Resultaat (met verticale uitvoer):

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

Deze keer zijn alle drie de tijdstempelwaarden identiek, hoewel de pg_sleep() functie werd gebruikt om de uitvoering te vertragen tussen elke aanroep naar statement_timestamp() .

Dit in tegenstelling tot de clock_timestamp() functie, die verandert zelfs als het door de instructie gaat (indien meerdere keren aangeroepen binnen de instructie).


  1. Hoe het aantal rijen in een tabel in SQL te tellen

  2. Spring + Hibernate:Query Plan Cache Geheugengebruik

  3. Verbindingsverwerking en -beperking met ProxySQL

  4. MySQL-weergaven