160 votes

fuseau horaire par défaut de postgres

J'ai installé PostgreSQL 9 et l'heure affichée est décalée d'une heure par rapport à l'heure du serveur.

La course à pied Select NOW() montre : 2011-07-12 11:51:50.453842+00

La date du serveur s'affiche : Tue Jul 12 12:51:40 BST 2011

Il y a un décalage d'une heure, mais le fuseau horaire indiqué dans la rubrique phppgadmin est : TimeZone Etc/GMT0

J'ai essayé d'aller dans le postgresql.conf et la mise en place

timezone = GMT

puis redémarrage, mais pas de changement.

Des idées ? Je pensais qu'il aurait simplement utilisé le fuseau horaire du serveur, mais ce n'est pas le cas !

SOLUTION ! J'ai mis à GMT Après avoir cherché, il s'est avéré que j'avais besoin de le mettre à Europe/London . Il tient compte de l'heure +1 de l'heure d'été britannique, ce qui n'est pas le cas de l'heure GMT !

169voto

Muhammad Usama Points 543

Le fuseau horaire est un paramètre de session. Vous pouvez donc modifier le fuseau horaire de la session en cours.

Véase le doc .

set timezone TO 'GMT';

Ou, plus proche de la norme SQL, utiliser l'option SET TIME ZONE commande. Remarquez les deux mots pour "TIME ZONE" alors que le code ci-dessus utilise un seul mot "timezone".

SET TIME ZONE 'UTC';

Le document explique la différence :

SET TIME ZONE étend la syntaxe définie dans la norme SQL. Le standard n'autorise que des décalages numériques de fuseaux horaires, alors que PostgreSQL autorise des spécifications de fuseaux horaires plus souples. Toutes les autres fonctionnalités de SET sont des extensions de PostgreSQL.

156voto

Choisir un timezone de :

SELECT * FROM pg_timezone_names;

Et set comme le montre l'exemple ci-dessous :

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

Utilisez le nom de votre base de données à la place de postgres dans la déclaration ci-dessus.

71voto

Basil Bourque Points 8938

En réponse acceptée por Muhammad Usama est correcte.

Nom du paramètre de configuration

Cette réponse montre comment définir un paramètre de configuration spécifique à Postgres avec ce qui suit :

SET timezone TO 'UTC';

timezone n'est pas une commande SQL, c'est le nom du paramètre de configuration.

Véase le document pour cela .

Commande SQL standard

Vous pouvez également utiliser la commande SQL définie par la spécification SQL : SET TIME ZONE . Dans cette syntaxe, une paire de mots TIME ZONE remplace "timezone" (commande SQL réelle par rapport au nom du paramètre), et il n'y a pas de "TO".

SET TIME ZONE 'UTC';

Cette commande et la précédente ont toutes deux le même effet : définir la valeur pour la session en cours uniquement. Pour rendre la modification permanente, voir cette commande réponse des frères et sœurs .

Véase le document pour cela .

Nom du fuseau horaire

Vous pouvez spécifier un nom du fuseau horaire approprié . La plupart d'entre eux sont des continents/régions.

SET TIME ZONE 'Africa/Casablanca';

ou

SET TIME ZONE 'America/Montreal';

Évitez les lettres de 3 ou 4 des abréviations telles que EST ou IST car ils ne sont ni normalisés ni uniques. Voir Wikipédia pour liste des noms de fuseaux horaires .

Obtenir la zone actuelle

Pour connaître le fuseau horaire actuel d'une session, essayez l'une des instructions suivantes. Techniquement, nous appelons la fonction SHOW pour afficher un paramètre d'exécution.

SHOW timezone ;

ou

SHOW time zone ;

États-Unis/Pacifique

63voto

guerrerocarlos Points 549

Pour effectuer le changement de fuseau horaire dans Postgres 9.1, vous devez :

1.- Cherchez dans votre dossier "timezones" dans /usr/share/postgresql/9.1/ le fichier approprié, dans mon cas ce serait "America.txt", dans ce fichier, cherchez l'endroit le plus proche de votre zone et copiez les premières lettres dans la colonne de gauche.

Par exemple, si vous êtes à "New York" ou à "Panama", ce sera "EST" :

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
                 #     (America/New_York)
                 #     (America/Panama)

2.- Décommentez la ligne "timezone" dans votre postgresql.conf et mettez votre fuseau horaire comme indiqué :

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia

3.- Redémarrer Postgres

10voto

Pascal Points 173

En plus des réponses précédentes, si vous utilisez l'outil pgAdmin III vous pouvez régler le fuseau horaire comme suit :

  1. Ouvrir la configuration de Postgres via Outils > Configuration du serveur > postgresql.conf
  2. Cherchez l'entrée fuseau horaire et double-cliquez pour ouvrir
  3. Modifier la valeur
  4. Recharger le serveur pour appliquer les changements de configuration (bouton Play en haut ou via les services)

Postgres config in pgAdmin III

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X