PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 09/10/2019 14:34:26

albourg
Membre

explication sur les timezones

Bonjour,

Dans postgresql.conf, il y a une ligne
    timezone = 'UTC'

J'aimerais avoir des explications:
* est-ce que ca veut dire que le serveur travaille en utc et qu'il faut dire à l'OS dans quel timezone il se trouve?
* est-ce qu'il y a un autre endroit où définir l'heure à afficher (tenant compte du timezone) à afficher lorsqu'on fait un "select now()"
* est-il possible de laisser cette ligne, et de définir dans chaque database du cluster, un timezone par défaut (qui pourrait être différent par database)? Nous avons un environnement de test et certaines bases de données seront expédiées à plusieurs endroits dans le monde, donc on doit pouvoir le gérer.
* est-ce que c'est au client de définir son timezone lorsqu'il se connecte (quand on fait un select now() on a l'heure du serveur, quel que soit le timezone du client)?


Y a-t'il un document quelque part qui explique les possibilités, j'ai cherché un peu mais n'ai rien trouvé de vraiment très clair?

Merci de votre aide.

Hors ligne

#2 10/10/2019 06:57:56

rjuju
Administrateur

Re : explication sur les timezones

Bonjour,

Ce paramètre indique la timezone à utiliser par défaut  à l'affichage ou pour interpréter une date (https://www.postgresql.org/docs/current … C-TIMEZONE).  Par exemple :

# show timezone;
   TimeZone   
--------------
 Europe/Paris
(1 row)

# select now();
              now              
-------------------------------
 2019-10-10 06:55:30.249279+02
(1 row)

# set timezone = UTC;
SET

# select now();
              now              
-------------------------------
 2019-10-10 04:55:39.899867+00
(1 row)

Vous pouvez changer la valeur par défaut d'une base avec un ALTER DATABASE.

Hors ligne

#3 10/10/2019 09:11:41

albourg
Membre

Re : explication sur les timezones

Et donc je suppose qu'il n'est pas possible, si j'ai plusieurs databases, de spécifier un timezone par database?

Hors ligne

#4 10/10/2019 14:31:24

rjuju
Administrateur

Re : explication sur les timezones

rjuju a écrit :

Vous pouvez changer la valeur par défaut d'une base avec un ALTER DATABASE.

Hors ligne

#5 15/10/2019 15:20:29

albourg
Membre

Re : explication sur les timezones

Je ne suis pas sur de comprendre. A partir du serveur:
J'ai une db timezone europe / brussels, et un champs createdon timestamp without timezone

select requestuuid, createdon, createdon AT TIME ZONE 'UTC'
from xxx;
             requestuuid              |        createdon        |          timezone
--------------------------------------+-------------------------+----------------------------
 fa8f06d3-906a-4db9-ae4c-b7f342e4b3da | 2019-05-20 16:25:56.374 | 2019-05-20 18:25:56.374+02

Je change le timezone à UTC dans postgresql.conf et relance postgres

select requestuuid, createdon, createdon AT TIME ZONE 'UTC'
from xxx;
             requestuuid              |        createdon        |          timezone
--------------------------------------+-------------------------+----------------------------
 fa8f06d3-906a-4db9-ae4c-b7f342e4b3da | 2019-05-20 16:25:56.374 | 2019-05-20 16:25:56.374+00

Je m'attendais à ce que createdon soit modifié mais pas du tout., et "createdon at time utc" est lui modifié à l'affichage pour tenir compte du timezone de postgresql.conf.
Donc si je comprends bien, quand je fais un select createdon, il m'envoie la valeur de createdon UTC peu importe le contenu de postgresql.conf?

Hors ligne

#6 15/10/2019 15:41:02

ruizsebastien
Membre

Re : explication sur les timezones

bonjour,

car without timezone correspond à UTC ?


Cordialement,

Sébastien.

Hors ligne

#7 15/10/2019 15:47:54

albourg
Membre

Re : explication sur les timezones

Donc quand on fait un select ts il le renvoie toujours au format UTC peu importe le contenu du postgresql.conf.
Pour l'afficher à un ts particulier il faut dire "AT TIME ZONE 'UTC'" et à ce moment il affiche l'heure locale selon postgresql.conf, et l'offset par rapport à utc. Perso je ne trouve pas ça très logique, j'aurais fait l'inverse.

Hors ligne

#8 15/10/2019 22:09:01

gleu
Administrateur

Re : explication sur les timezones

Non, rjuju l'a d'ailleurs montré plus haut. Il suffit de configurer le paramètre timezone.


Guillaume.

Hors ligne

#9 16/10/2019 09:00:54

albourg
Membre

Re : explication sur les timezones

rjuju a fait un select now(). Pas un select sur un champs "timestamp without timezone" d'une table existante.

Hors ligne

#10 16/10/2019 11:12:36

rjuju
Administrateur

Re : explication sur les timezones

Effectivement.  Cela dit, je ne suis par sur de comprendre ce que vous attendez d'un changement de timezone si vous utilisez une date qui n'a pas de timezone?

Hors ligne

#11 16/10/2019 11:20:03

albourg
Membre

Re : explication sur les timezones

Nous avons une db où nous avons positionné (à la création) timezone Brussels car l'installation software a été faite à Bruxelles, mais ce serveur doit tourner en Afrique.
Ce serveur a donc été envoyé en Afrique de l'Ouest.
Jboss/jpa a créé des champs "timestamp without timezone".
Les applications communiquent l'heure en UTC.

La question est "quel est l'impact si on change le timezone du serveur de Brussels->UTC".
Je pensais que select ts afficherait une valeur différente, mais ce n'est pas le cas.

Hors ligne

#12 16/10/2019 15:07:29

ruizsebastien
Membre

Re : explication sur les timezones

normalement la définition d'une colonne est prioritaire à la définition d'une database.
Donc votre colonne en timestamp without timezone ne sera pas impactée par le timezone de la base elle même.


Cordialement,

Sébastien.

Hors ligne

Pied de page des forums