Resumen: En este tutorial, aprenderá sobre los tipos de datos de marca de tiempo de PostgreSQL, incluidos timestamp y timestamptz. También aprenderá a usar algunas funciones prácticas para manejar los datos de marca de tiempo de manera más efectiva.,

Introducción a la marca de tiempo de PostgreSQL

PostgreSQL le proporciona dos tipos de datos temporales para manejar la marca de tiempo:

  • timestamp: una marca de tiempo sin una zona horaria.
  • timestamptz: marca de tiempo con una zona horaria.

el tipo de datos timestamp le permite almacenar tanto la fecha como la hora. Sin embargo, no tiene datos de zona horaria., Esto significa que cuando cambia la zona horaria de su servidor de base de datos, el valor de la marca de tiempo almacenada en la base de datos no cambiará automáticamente.

el tipo de datos timestamptz es la marca de tiempo con la zona horaria. El tipo de datos timestamptz es un tipo de datos de fecha y hora compatible con zonas horarias.

PostgreSQL almacena eltimestamptz en el valor UTC.

  • Cuando inserta un valor en una columna timestamptz, PostgreSQL convierte el valor timestamptz en un valor UTC y almacena el valor UTC en la tabla.,
  • Cuando consulta timestamptz de la base de datos, PostgreSQL convierte el valor UTC de nuevo al valor de hora de la zona horaria establecida por el servidor de base de datos, el usuario o la conexión de base de datos actual.

observe que tanto timestamp como timestamptz utiliza 8 bytes para almacenar los valores de marca de tiempo como se muestra en la siguiente consulta:

Code language: SQL (Structured Query Language) (sql)

es importante tener en cuenta que timestamptz el valor se almacena como un valor UTC. PostgreSQL no almacena ningún dato de zona horaria con el valor timestamptz.,

PostgreSQL timestamp ejemplo

echemos un vistazo a un ejemplo de uso de la etiqueta timestamp y timestamptz para tener una mejor comprensión de cómo PostgreSQL controla.

primero, cree una tabla que conste de las columnas timestamp timestamptz.

Code language: SQL (Structured Query Language) (sql)

a continuación, establecer la zona horaria del servidor de base de datos America/Los_Angeles.,

Code language: SQL (Structured Query Language) (sql)

por cierto, puede ver la zona horaria actual utilizando el comando SHOW TIMEZONE:

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

a continuación, inserte una nueva fila en timstamp_demo tabla:

después de eso, consulta los datos de las columnas timestamp y timestamptz.

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

La consulta devuelve los mismos valores de marca de tiempo como los valores insertados.,

finalmente, cambie la zona horaria de la sesión actual a America/New_York y vuelva a consultar los datos.

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

El valor de la etiqueta timestamp columna no cambia, considerando que el valor en la etiqueta timestamptz columna se ajusta a la nueva zona horaria de 'America/New_York'.

generalmente, es una buena práctica usar el tipo de datos timestamptz para almacenar los datos de la marca de tiempo.,>

Para manejar datos timestamp efectivamente, PostgreSQL proporciona algunas funciones útiles, como la siguiente:

Obtener la hora actual

Para obtener la corriente de marca de hora de utilizar la etiqueta NOW() función como sigue:

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

O puede utilizar la etiqueta CURRENT_TIMESTAMP:

Code language: SQL (Structured Query Language) (sql)

Para obtener el tiempo actual sin fecha, utilice CURRENT_TIME:

Code language: SQL (Structured Query Language) (sql)

tenga en cuenta que tanto CURRENT_TIMESTAMP y CURRENT_TIME volver el tiempo actual con la zona horaria.,

para obtener la hora del día en el formato de cadena, utilice la función timeofday().

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

Convertir entre zonas horarias

Para convertir una fecha a otra zona horaria, se utiliza la etiqueta timezone(zone, timestamp) función.

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

La zona horaria actual es America/Los_Angeles.,

To convert 2016-06-01 00:00 to America/New_York timezone, you use the timezone() function as follows:

Code language: SQL (Structured Query Language) (sql)
Code language: SQL (Structured Query Language) (sql)

Note that we pass the timestamp as a string to the timezone() function, PostgreSQL casts it to timestamptz implicitly., Es mejor emitir un valor de marca de tiempo al tipo de datos timestamptz explícitamente como la siguiente instrucción:

Code language: SQL (Structured Query Language) (sql)

en este tutorial, le ha presentado el tipo de datos de marca de tiempo de PostgreSQL y le ha mostrado cómo usar algunas funciones útiles para manipular valores de marca de tiempo.

  • ¿Fue útil este tutorial ?
  • YesNo