sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan statement_timestamp() virker i PostgreSQL

I PostgreSQL, statement_timestamp() funktion returnerer den aktuelle dato og det aktuelle klokkeslæt (inklusive tidszoneforskydningen) ved starten af ​​den aktuelle sætning.

Funktionen accepterer ingen parametre, så du kan ikke angive dens præcision.

Også statement_timestamp() er en ikke-SQL-standard funktion.

Syntaks

Syntaksen ser sådan ud:

statement_timestamp()

Ingen argumenter er påkrævet eller accepteret.

Grundlæggende eksempel

Her er et grundlæggende eksempel at demonstrere.

SELECT statement_timestamp();

Resultat:

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

Inden for en transaktion

Her er et eksempel, der viser, hvordan det fungerer inden for en transaktion.

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

Her er det fulde output i min terminal, når jeg bruger 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

I dette eksempel brugte jeg pg_sleep() funktion til at forsinke eksekvering mellem hver sætning.

Fordi hver statement_timestamp() kaldet var i sin egen SQL-sætning, det returnerede tidsstempel var forskelligt for hvert opkald.

Dette er i modsætning til transaction_timestamp() , hvilket ikke gør ændres med hvert udsagn. Den returnerer sit tidsstempel baseret på starttidspunktet for transaktionen.

Flere opkald inden for et kontoudtog

Her er et eksempel på, hvad der sker, hvis vi kombinerer alle tre funktionskald i en enkelt SQL-sætning.

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

Resultat (ved hjælp af lodret output):

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

Denne gang er alle tre tidsstempelværdier identiske, selvom pg_sleep() funktion blev brugt til at forsinke eksekveringen mellem hvert kald til statement_timestamp() .

Dette er i modsætning til clock_timestamp() funktion, som ændres, selvom den skrider frem gennem sætningen (hvis den kaldes flere gange i sætningen).


  1. Sådan genforespørger du automatisk med LoaderManager

  2. Sådan sammenlignes dato i SQL

  3. Sådan tilføjes et betinget unikt indeks på PostgreSQL

  4. TEMPFILE Offline fysisk standby