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).