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

Cómo funciona LocalTimeStamp() en PostgreSQL

En PostgreSQL, el localtimestamp() La función devuelve la fecha y la hora locales, sin el desplazamiento de la zona horaria.

Si necesita el desplazamiento de la zona horaria, use current_timestamp() en su lugar.

Sintaxis

Puede usarlo de cualquiera de las siguientes maneras:

localtimestamp
localtimestamp(x)

Donde x es un parámetro de precisión opcional, que hace que el resultado se redondee a x número de dígitos fraccionarios en el campo de segundos.

Sin un parámetro de precisión (la primera sintaxis), el resultado se da con la precisión total disponible.

Ejemplo:precisión total

Aquí hay un ejemplo básico para demostrar un resultado usando la precisión disponible completa.

SELECT localtimestamp;

Resultado:

2020-07-01 15:55:48.039777

Ejemplo:precisión específica

Aquí hay un ejemplo para demostrar cómo especificar la precisión.

SELECT localtimestamp(0);

Resultado:

2020-07-01 15:56:02

En este ejemplo, especifiqué una precisión de cero, lo que significa que no se devolvieron fracciones de segundo.

Aquí hay otro ejemplo donde especifico un número de segundos fraccionarios.

SELECT localtimestamp(3);

Resultado:

2020-07-01 15:56:14.771

Transacciones

La marca de tiempo real se basa en la hora de inicio de la transacción actual. Por lo tanto, no cambia a medida que avanza la transacción.

Esto permite que una sola transacción tenga una noción consistente de la hora "actual", de modo que múltiples modificaciones dentro de la misma transacción lleven la misma marca de tiempo.

Aquí hay un ejemplo que demuestra esto.

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

Aquí está el resultado completo de mi terminal al ejecutar esa transacción en 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

Los tres valores de tiempo son idénticos, aunque pg_sleep() se utilizó la función para retrasar la ejecución entre cada declaración dentro de la transacción.

Esto contrasta con statement_timestamp() que hace cambiar con cada afirmación.

Múltiples llamadas dentro de una declaración

Tampoco cambia a medida que avanza la declaración.

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

Resultado (usando salida vertical):

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

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

Esto contrasta con clock_timestamp() función, que hace cambia a medida que avanza a través de la declaración.

En este ejemplo, utilicé la salida vertical (también conocida como salida expandida) para que los resultados fueran un poco más compactos.

Puede alternar la salida expandida en psql usando \x .