sql >> Databáze >  >> RDS >> PostgreSQL

Jak funguje statement_timestamp() v PostgreSQL

V PostgreSQL je to statement_timestamp() funkce vrací aktuální datum a čas (včetně posunu časového pásma) na začátku aktuálního příkazu.

Funkce nepřijímá žádné parametry, takže nemůžete určit její přesnost.

Také statement_timestamp() je nestandardní funkce SQL.

Syntaxe

Syntaxe vypadá takto:

statement_timestamp()

Nejsou vyžadovány ani přijímány žádné argumenty.

Základní příklad

Zde je základní příklad k demonstraci.

SELECT statement_timestamp();

Výsledek:

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

V rámci transakce

Zde je příklad demonstrující, jak to funguje v rámci transakce.

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

Zde je úplný výstup v mém terminálu při použití 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

V tomto příkladu jsem použil pg_sleep() funkce pro zpoždění provádění mezi jednotlivými příkazy.

Protože každý statement_timestamp() volání bylo ve vlastním příkazu SQL, vrácené časové razítko se u každého volání lišilo.

To je v kontrastu s transaction_timestamp() , což není měnit s každým prohlášením. Vrátí své časové razítko na základě času zahájení transakce.

Více hovorů v rámci výpisu

Zde je příklad toho, co se stane, když zkombinujeme všechna tři volání funkcí do jednoho příkazu SQL.

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

Výsledek (při použití vertikálního výstupu):

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

Tentokrát jsou všechny tři hodnoty časového razítka totožné, i když pg_sleep() funkce byla použita ke zpoždění provádění mezi každým voláním statement_timestamp() .

To je v kontrastu s clock_timestamp() funkce, která se mění, i když postupuje příkazem (pokud je v příkazu volána vícekrát).


  1. Spusťte velký SQL skript (s příkazy GO)

  2. Jak vybrat data tabulky z jiné databáze v SQL Server?

  3. Prům. nekonzistence plováku

  4. Jak získat maximální a minimální hodnoty z tabulky pomocí agregační funkce - SQL Server / TSQL výukový program, část 129