B.4. Archivos de configuración de fecha/hora #

Dado que las abreviaturas de las zonas horarias no están muy estandarizadas, PostgreSQL proporciona un medio para personalizar el conjunto de abreviaturas aceptadas en la entrada de fecha y hora. Existen dos fuentes para estas abreviaturas:

  1. El parámetro de ejecución TimeZone se configura habitualmente con el nombre de una entrada en la base de datos de zonas horarias de la IANA. Si esa zona cuenta con abreviaturas de zona ampliamente utilizadas, estas aparecerán en los datos de la IANA, y PostgreSQL reconocerá de forma preferente esas abreviaturas con los significados dados en los datos de la IANA. Por ejemplo, si timezone está configurado en America/New_York, entonces EST se entenderá como UTC-5 y EDT como UTC-4. (Estas abreviaturas de la IANA también se utilizarán en la salida de fecha y hora, si DateStyle está configurado en un estilo que prefiera abreviaturas de zona no numéricas).

  2. Si una abreviatura no se encuentra en la zona horaria actual de la IANA, se busca en la lista especificada por el parámetro de ejecución timezone_abbreviations. La lista timezone_abbreviations es principalmente útil para permitir que la entrada de fecha y hora reconozca abreviaturas de zonas horarias distintas a la zona actual. (Estas abreviaturas no se utilizarán en la salida de fecha y hora).

Aunque cualquier usuario de la base de datos puede alterar el parámetro timezone_abbreviations, los valores posibles para este están bajo el control del administrador de la base de datos — de hecho, son nombres de archivos de configuración almacenados en .../share/timezonesets/ del directorio de instalación. Al añadir o alterar archivos en ese directorio, el administrador puede establecer políticas locales para las abreviaturas de las zonas horarias.

timezone_abbreviations se puede configurar con cualquier nombre de archivo que se encuentre en .../share/timezonesets/, siempre que el nombre del archivo sea completamente alfabético. (La prohibición de caracteres no alfabéticos en timezone_abbreviations evita la lectura de archivos fuera del directorio previsto, así como la lectura de archivos de respaldo de editores y otros archivos extraños).

Un archivo de abreviaturas de zona horaria puede contener líneas en blanco y comentarios que comiencen con #. Las líneas que no sean comentarios deben tener uno de estos formatos:

abreviatura_zona desfase
abreviatura_zona desfase D
abreviatura_zona nombre_zona_horaria
@INCLUDE nombre_archivo
@OVERRIDE

Una abreviatura_zona es simplemente la abreviatura que se está definiendo. Un desfase es un entero que indica el desfase equivalente en segundos respecto a UTC, siendo positivo hacia el este de Greenwich y negativo hacia el oeste. Por ejemplo, -18000 sería cinco horas al oeste de Greenwich, o la hora estándar de la costa este de América del Norte. D indica que el nombre de la zona representa el horario de verano local en lugar de la hora estándar.

Alternativamente, se puede proporcionar un nombre_zona_horaria, que hace referencia a un nombre de zona definido en la base de datos de zonas horarias de la IANA. Se consulta la definición de la zona para ver si la abreviatura está o ha estado en uso en esa zona y, de ser así, se utiliza el significado adecuado — es decir, el significado que estaba en uso actualmente en la marca de tiempo cuyo valor se está determinando, o el significado en uso inmediatamente antes de eso si no estaba vigente en ese momento, o el significado más antiguo si se utilizó solo después de ese momento. Este comportamiento es esencial para manejar abreviaturas cuyo significado ha variado históricamente. También se permite definir una abreviatura en términos de un nombre de zona en el que esa abreviatura no aparece; en ese caso, usar la abreviatura equivale simplemente a escribir el nombre de la zona.

Tip

Se prefiere el uso de un simple entero para el desfase al definir una abreviatura cuyo desfase respecto a UTC nunca haya cambiado, ya que procesar estas abreviaturas es mucho más rápido que procesar aquellas que requieren consultar una definición de zona horaria.

La sintaxis @INCLUDE permite incluir otro archivo del directorio .../share/timezonesets/. La inclusión se puede anidar hasta una profundidad limitada.

La sintaxis @OVERRIDE indica que las entradas subsiguientes en el archivo pueden sobrescribir las entradas anteriores (normalmente, las entradas obtenidas de los archivos incluidos). Sin esto, las definiciones conflictivas de una misma abreviatura de zona horaria se consideran un error.

En una instalación sin modificar, el archivo Default contiene todas las abreviaturas de zona horaria no conflictivas para la mayor parte del mundo. Se proporcionan archivos adicionales, Australia e India, para esas regiones: estos archivos incluyen primero el archivo Default y luego añaden o modifican las abreviaturas según sea necesario.

Para fines de referencia, una instalación estándar también contiene los archivos Africa.txt, America.txt, etc., que contienen información sobre cada abreviatura de zona horaria que se sabe que está en uso según la base de datos de zonas horarias de la IANA. Las definiciones de nombres de zonas que se encuentran en estos archivos se pueden copiar y pegar en un archivo de configuración personalizado según sea necesario. Ten en cuenta que estos archivos no se pueden referenciar directamente como ajustes de timezone_abbreviations, debido al punto incorporado en sus nombres.

Note

Si ocurre un error al leer el conjunto de abreviaturas de zona horaria, no se aplica ningún valor nuevo y se conserva el conjunto anterior. Si el error ocurre al iniciar la base de datos, el inicio falla.

Caution

Las abreviaturas de zonas horarias definidas en el archivo de configuración anulan los significados que no son de zona horaria incorporados en PostgreSQL. Por ejemplo, el archivo de configuración Australia define SAT (para el Horario Estándar de Australia Meridional). Cuando este archivo está activo, SAT no se reconocerá como abreviatura de Saturday (Sábado).

Caution

Si modificas los archivos en .../share/timezonesets/, depende de ti realizar las copias de seguridad — un respaldo normal de la base de datos no incluirá este directorio.