sql >> Base de Datos >  >> RDS >> PostgreSQL

Cómo funciona statement_timestamp() en PostgreSQL

En PostgreSQL, el statement_timestamp() La función devuelve la fecha y la hora actuales (incluida la compensación de la zona horaria), al comienzo de la instrucción actual.

La función no acepta ningún parámetro, por lo que no puede especificar su precisión.

Además, statement_timestamp() es una función no estándar de SQL.

Sintaxis

La sintaxis es así:

statement_timestamp()

No se requieren ni se aceptan argumentos.

Ejemplo básico

Aquí hay un ejemplo básico para demostrarlo.

SELECT statement_timestamp();

Resultado:

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

Dentro de una transacción

Aquí hay un ejemplo para demostrar cómo funciona dentro de una transacción.

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

Aquí está el resultado completo dentro de mi terminal cuando uso 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

En este ejemplo utilicé pg_sleep() Función para retrasar la ejecución entre cada declaración.

Porque cada statement_timestamp() la llamada estaba en su propia instrucción SQL, la marca de tiempo devuelta era diferente con cada llamada.

Esto contrasta con transaction_timestamp() , que no cambiar con cada declaración. Devuelve su marca de tiempo en función de la hora de inicio de la transacción.

Múltiples llamadas dentro de una declaración

Aquí hay un ejemplo de lo que sucede si combinamos las tres llamadas de función dentro de una sola instrucción SQL.

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

Resultado (usando salida vertical):

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

Esta vez, los tres valores de marca de tiempo son idénticos, aunque pg_sleep() La función se usó para retrasar la ejecución entre cada llamada a statement_timestamp() .

Esto contrasta con el clock_timestamp() función, que cambia incluso a medida que avanza a través de la declaración (si se llama varias veces dentro de la declaración).