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

Hvordan current_timestamp() virker i PostgreSQL

I PostgreSQL er current_timestamp() funktionen returnerer den aktuelle dato og klokkeslæt, inklusive tidszoneforskydningen.

Det returnerede tidsstempel er baseret på starttidspunktet for den aktuelle transaktion.

Syntaks

Du kan bruge det på en af ​​følgende måder:

current_timestamp
current_timestamp(x)

Hvor x er en valgfri præcisionsparameter, som får resultatet til at blive afrundet til x antal brøkcifre i sekundfeltet.

Uden en præcisionsparameter (den første syntaks) gives resultatet til den fulde tilgængelige præcision.

Eksempel – Fuld præcision

Her er et grundlæggende eksempel for at demonstrere et resultat ved hjælp af den fulde tilgængelige præcision.

SELECT current_timestamp;

Resultat:

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

Eksempel – Specifik præcision

Her er et eksempel for at demonstrere, hvordan præcisionen specificeres.

SELECT current_timestamp(0);

Resultat:

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

I dette eksempel specificerede jeg en præcision på nul, hvilket betyder, at der ikke blev returneret nogen brøksekunder.

Her er et andet eksempel, hvor jeg angiver et antal brøksekunder.

SELECT current_timestamp(3);

Resultat:

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

Transaktioner

Det faktiske tidsstempel er baseret på starttidspunktet for den aktuelle transaktion. Derfor ændres det ikke, efterhånden som transaktionen skrider frem.

Dette gør det muligt for en enkelt transaktion at have en konsistent forestilling om det "aktuelle" tidspunkt, så flere ændringer inden for samme transaktion bærer det samme tidsstempel.

Her er et eksempel, der demonstrerer dette.

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

Her er det fulde output fra min terminal, når jeg udfører den transaktion i 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

Alle tre tidsværdier er identiske, selvom pg_sleep() funktion blev brugt til at forsinke eksekvering mellem hver erklæring i transaktionen.

Dette er i modsætning til statement_timestamp() hvilket gør ændres med hvert udsagn.

Flere opkald inden for et kontoudtog

Det ændrer sig heller ikke, efterhånden som udsagnet skrider frem.

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

Resultat (ved hjælp af lodret output):

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

Alle tre tidsværdier er identiske, selvom pg_sleep() funktion blev brugt til at forsinke eksekveringen mellem hvert opkald til current_timestamp .

Dette er i modsætning til clock_timestamp() funktion, som gør ændres, efterhånden som den skrider frem gennem erklæringen.

Forresten brugte jeg lodret output (også kendt som udvidet output) for at gøre resultaterne lidt mere kompakte.

Du kan skifte udvidet output i psql ved hjælp af \x .


  1. Android SQLite jokertegn

  2. Brug af setDate i PreparedStatement

  3. Hvordan tilføjer man en ny kolonne i en tabel efter 2. eller 3. kolonne i tabellen ved hjælp af postgres?

  4. Postgresql - backup af database og gendannelse på anden ejer?