Comme il n'existe pas de réel standard des abréviations de fuseaux
horaire, PostgreSQL permet de personnaliser
l'ensemble des abréviations acceptées par le serveur. Le paramètre
d'exécution timezone_abbreviations détermine
l'ensemble des abréviations actives. Bien que tout utilisateur de la base
puisse modifier ce paramètre, les valeurs possibles sont
sous le contrôle de l'administrateur de bases de données -- 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 définir les règles d'abréviation des fuseaux horaires.
timezone_abbreviations
peut prendre tout nom
de fichier situé dans .../share/timezonesets/
, sous
réserve que ce nom soit purement alphabétique. (L'interdiction de
caractères non alphabétique dans timezone_abbreviations
empêche la lecture de fichiers en dehors du répertoire prévu et
celle de fichiers de sauvegarde ou autre.)
Un fichier d'abréviation de zones horaires peut contenir des lignes blanches
et des commentaires (commençant avec un #
). Les
autres lignes doivent suivre l'un des formats suivants :
abréviation_fuseau_horaire
décalage
abréviation_fuseau_horaire
décalage
Dabréviation_fuseau_horaire
nom_fuseau_horaire
@INCLUDEnom_fichier
@OVERRIDE
Un abréviation_fuseau_horaire
n'est que
l'abréviation définie. Le décalage
est un entier
donner le décalage en secondes à partir d'UTC, une valeur positive
signifiant à l'est de Greenwich, une valeur négative à l'ouest. Ainsi,
-18000 représente cinq heures à l'ouest de Greenwich, soit l'heure standard
de la côte ouest nord américaine. D
indique que le nom
du fuseau représente une heure soumise à des règles de changement d'heure
plutôt que l'heure standard.
Autrement, un nom_fuseau_horaire
peut être
indiqué, référençant un nom de fuseau horaire défini dans la base de
données IANA. La définition du fuseau est consultée pour voir si
l'abréviation est ou était utilisée pour ce fuseau et, si c'est bien le
cas, la signification appropriée est utilisée -- la signification qui
était utilisée pour l'horodatage dont la valeur était en cours de
détermination ou la signification utilisée immédiatement avant ça si elle
n'était pas actuelle à ce moment, ou la signification la plus ancienne si
elle était utilisée seulement après ce moment. Ce comportement est
essentiel pour gérer les abréviations dont la signification a varié dans
l'histoire. Il est aussi permis de définir une abréviation en terme de nom
de fuseau horaire pour lequel cette abréviation n'apparaît pas ; alors
utiliser l'abréviation est équivalent à écrire le nom du fuseau horaire.
Utiliser un entier simple pour le décalage
est
préféré lors de la définition d'une abréviation dont le décalage à partir
d'UTC n'a jamais changé, car ce type d'abréviation est bien moins coûteuse
à traiter que celles qui réclament de consulter la définition du fuseau
horaire.
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 peuvent surcharger les entrées précédentes (c'est-à-dire des
entrées obtenues à partir de fichiers inclus). Sans cela, les définitions en
conflit au sein d'une même abréviation lèvent une erreur.
Dans une installation non modifiée, le fichier Default
contient toutes les abréviations de fuseaux horaire, sans conflit, pour la
quasi-totalité du monde. Les fichiers supplémentaires Australia
et India
sont fournis pour ces régions : ces
fichiers incluent le fichier Default
puis
ajoutent ou modifient les fuseaux horaires si nécessaire.
Pour des raisons de référence, une installation standard contient aussi
des fichiers Africa.txt
, America.txt
,
etc. qui contiennent des informations sur les abréviations connues et
utilisées en accord avec la base de données de fuseaux horaires
IANA. 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. Il ne peut pas être fait directement référence
à ces fichiers dans le paramètre
timezone_abbreviations
à cause du point dans leur nom.
Si une erreur survient lors de la lecture des abréviations de fuseaux horaires, aucune nouvelle valeur n'est acceptée mais les anciennes sont conservées. Si l'erreur survient au démarrage de la base, celui-ci échoue.
Les abréviations de fuseau horaire définies dans le fichier de configuration
surchargent les informations sans fuseau définies nativement dans
PostgreSQL.
Par exemple, le fichier de configuration Australia
définit SAT
(South Australian Standard
Time, soit l'heure standard pour l'Australie du sud). Si
ce fichier est actif, SAT
n'est plus reconnu comme
abréviation de samedi (Saturday).
Si les fichiers de .../share/timezonesets/
sont
modifiés, il revient à l'utilisateur de procéder à leur sauvegarde --
une sauvegarde normale de base n'inclut pas ce répertoire.