Comme les abréviations de fuseaux horaire ne sont pas bien standardisés, PostgreSQL™ fournit un moyen de personnaliser l'ensemble d'abréviations acceptées par le serveur. Le paramètre en exécution timezone_abbreviations détermine l'ensemble des abréviations actives. Bien que ce paramètre puisse être modifié par tout utilisateur de la base, les valeurs possibles sont sous le contrôle de l'administrateur de la base -- ce sont en fait les noms des fichiers de configuration stockés dans .../share/timezonesets/ du répertoire d'installation. En ajoutant ou en modifiant les fichiers de ce répertoire, l'administrateur peut configurer la politique pour les abréviations système.
timezone_abbreviations peut être configuré avec tout nom de fichier se trouvant dans .../share/timezonesets/ si le nom du fichier est entièrement alphabétique. (L'interdiction de caractères non alphabétique dans timezone_abbreviations empêche la lecture de fichiers en dehors du répertoire attendu et empêche aussi la lecture de fichiers de sauvegarde et d'autres fichiers.)
Un fichier d'abréviation de zones horaires peut contenir des lignes blanches et des commentaires (lignes commençant avec un #). Les lignes qui ne sont pas des commentaires doivent être dans un de ces formats :
nom_fuseau_horaire décalage nom_fuseau_horaire décalage D @INCLUDE nom_fichier @OVERRIDE
Un nom_fuseau_horaire est tout simplement l'abréviation à définir. Le décalage est le décalage en secondes à partir d'UTC, une valeur positive signifiant à l'est de Greenwich, une valeur négative signifiant à l'ouest. negative being west. Par exemple, -18000 représente cinq heures à l'ouest de Greenwich, soit l'heure standard de la coût ouest nord américaine. D indique que le nom du fuseau représente l'heure de changement d'heure plutôt que l'heure standard. Comme tous les décalages de fuseau horaire sont sur des limites de 15 minutes, le nombre de secondes doit être un multiple de 900.
La syntaxe @INCLUDE autorise l'inclusion d'autres fichiers du répertoire .../share/timezonesets/. Les inclusions peuvent être imbriquées jusqu'à une certaine profondeur.
La syntaxe @OVERRIDE indique que les entrées suivantes du fichier pourraient surcharger des entrées précédentes (c'est-à-dire des entrées obtenues à partir de fichiers inclus). Sans cela, les définitions en conflit pour les mêmes abréviations de zone horaire sont considérées comme une erreur.
Dans une installation non modifiée, le fichier Default contient toutes les abréviations de fuseaux horaire sans conflit pour la plupart du monde. Les fichiers supplémentaires Australia et India sont fournis pour ces régions : ces fichiers incluent en premier le fichier Default puis ajoutent ou modifient les fuseaux horaires suivant leur besoin.
Pour des raisons de référence, une installation standard contient aussi des fichiers Africa.txt, America.txt, etc, contenant des informations sur chaque abréviation connue pour être utilisé en accord avec la base de données de fuseau horaire zic. Les définitions des noms de zone trouvées dans ces fichiers peuvent être copiées et collées dans un fichier de configuration personnalisé si nécessaire. Notez que ces fichiers ne peuvent pas être directement référencés dans le paramètre timezone_abbreviations à cause du point dans leur nom.
Si une erreur survient lors de la lecture des ensembles de données sur les fuseaux horaires, aucune nouvelle valeur n'est acceptée mais les anciennes sont conservées. Si l'erreur survient au lancement de la base, le lancement échoue.
Les abréviations de fuseau horaire définies dans le fichier de configuration surchargent les informations sans fuseaux dans PostgreSQL™. Par exemple, le fichier de configuration Australia définit SAT (pour South Australian Standard Time, soit l'heure standard pour l'Australie du sud). Quand ce fichier est actif, SAT ne sera plus reconnu comme abréviation pour samedi (Saturday).
Si vous modifiez les fichiers de .../share/timezonesets/, c'est à vous d'en faire des sauvegardes -- une sauvegarde normale de base n'incluera pas ce répertoire.