sql >> Database >  >> RDS >> PostgreSQL

Hoe LocalTimeStamp() werkt in PostgreSQL

In PostgreSQL is de localtimestamp() functie retourneert de lokale datum en tijd, zonder de tijdzone-offset.

Als u de tijdzone-offset nodig heeft, gebruikt u current_timestamp() in plaats daarvan.

Syntaxis

Je kunt het op een van de volgende manieren gebruiken:

localtimestamp
localtimestamp(x)

Waar x is een optionele precisieparameter, die ervoor zorgt dat het resultaat wordt afgerond op x aantal gebroken cijfers in het secondenveld.

Zonder een precisieparameter (de eerste syntaxis), wordt het resultaat gegeven aan de volledig beschikbare precisie.

Voorbeeld – Volledige precisie

Hier is een eenvoudig voorbeeld om een ​​resultaat te demonstreren met gebruikmaking van de volledig beschikbare precisie.

SELECT localtimestamp;

Resultaat:

2020-07-01 15:55:48.039777

Voorbeeld – Specifieke precisie

Hier is een voorbeeld om te demonstreren hoe u de precisie specificeert.

SELECT localtimestamp(0);

Resultaat:

2020-07-01 15:56:02

In dit voorbeeld heb ik een precisie van nul gespecificeerd, wat betekent dat er geen fractionele seconden werden geretourneerd.

Hier is nog een voorbeeld waarbij ik een aantal fractionele seconden specificeer.

SELECT localtimestamp(3);

Resultaat:

2020-07-01 15:56:14.771

Transacties

De werkelijke tijdstempel is gebaseerd op de starttijd van de huidige transactie. Daarom verandert het niet naarmate de transactie vordert.

Hierdoor kan een enkele transactie een consistent idee hebben van de "huidige" tijd, zodat meerdere wijzigingen binnen dezelfde transactie hetzelfde tijdstempel dragen.

Hier is een voorbeeld dat dit aantoont.

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

Hier is de volledige uitvoer van mijn terminal bij het uitvoeren van die transactie in psql:

postgres=# BEGIN;
BEGIN
postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


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


postgres=# SELECT localtimestamp;
      localtimestamp      
--------------------------
 2020-07-02 09:25:38.3858
(1 row)


postgres=# COMMIT;
COMMIT

Alle drie de tijdwaarden zijn identiek, hoewel de pg_sleep() functie werd gebruikt om de uitvoering tussen elke verklaring binnen de transactie te vertragen.

Dit in tegenstelling tot statement_timestamp() wat doet veranderen bij elke uitspraak.

Meerdere oproepen binnen een verklaring

Het verandert ook niet naarmate de verklaring vordert.

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

Resultaat (met verticale uitvoer):

localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801
pg_sleep       | 
localtimestamp | 2020-07-02 09:26:46.743801

Alle drie de tijdwaarden zijn identiek, hoewel de pg_sleep() functie werd gebruikt om de uitvoering te vertragen tussen elke aanroep naar localtimestamp .

Dit in tegenstelling tot de clock_timestamp() functie, wat doet veranderen naarmate de instructie vordert.

In dit voorbeeld heb ik verticale uitvoer gebruikt (ook bekend als uitgebreide uitvoer) om de resultaten iets compacter te maken.

U kunt uitgebreide uitvoer in psql schakelen met \x .


  1. Een Microsoft T-SQL-trigger ontwerpen

  2. Hoe een berekende kolom in de SQL Server-tabel toe te voegen - SQL Server / T-SQL-zelfstudie, deel 47

  3. Opgeslagen SQL-aanroepprocedure voor elke rij zonder een cursor te gebruiken

  4. Automatische failover voor TimescaleDB bereiken