2012-08-02 6 views
22

Wie stelle ich die Zeitzone für psql auf etwas anderes als meinen Standard (US/Central) ein? Hier ist, was ich versucht habe, so weit:Wie stelle ich die Zeitzone für Postgres psql ein?

$ psql 
psql (9.1.4, server 9.0.4) 
... 

$ psql -c 'show timezone' 
    TimeZone 
------------ 
US/Central 

$ psql --set=timezone=US/Eastern -c 'show timezone' 
    TimeZone 
------------ 
US/Central 

$ psql --variable=timezone=US/Eastern -c 'show timezone' 
    TimeZone 
------------ 
US/Central 

bearbeiten: Ich möchte nicht, die Server-Zeitzone ändern, nur den Client.

Bearbeiten # 2: Ich möchte es im nicht interaktiven Modus.

+0

Ändern der Zeitzone sollte mit der ** SQL ** Anweisung 'set' gemacht werden, nicht durch psql Befehle (siehe Richards Antwort) –

Antwort

16

Die psql doc sagt:

-v assignment 
--set=assignment 
--variable=assignment 
Perform a variable assignment, like the \set internal command. Note that 
you must separate name and value, if any, by an equal sign on the command line.... 

Aber mit der Zeitzone es scheint nicht zu arbeiten, vielleicht, weil aus diesem Grund:

These assignments are done during a very early stage of start-up, 
so variables reserved for internal purposes might get overwritten later. 

Also, es scheint, Sie müssen entweder Verwenden Sie den SET-Befehl in psql oder setzen Sie entweder die Umgebungsvariable PGTZ:

PGTZ=PST8PDT psql -c 'show timezone' 

Natürlich, wenn Sie mit der Einstellung der Zeitzone global für den Benutzer (und nicht nur für diese einzelne psql Instanz) in Ordnung sind, können Sie diese Variable in seiner .bashrc Datei (falls in Linux) gesetzt

+0

PGTZ für den Sieg! – dfrankow

+1

Beachten Sie, dass Sie es nicht exportieren müssen. Bei der Bash-Eingabeaufforderung: PGTZ = US/Eastern psql -c 'Zeitzone anzeigen' – dfrankow

+0

@dfrankow Sie sind völlig richtig, ich habe das behoben – leonbloy

23
psql (9.1.4) 
Type "help" for help. 

richardh=> show timezone; 
TimeZone 
---------- 
GB 
(1 row) 

richardh=> set timezone='UTC'; 
SET 
richardh=> show timezone; 
TimeZone 
---------- 
UTC 
(1 row) 

richardh=> set timezone='US/Eastern'; 
SET 
richardh=> show timezone; 
    TimeZone 
------------ 
US/Eastern 
(1 row) 

richardh=> set timezone='blah'; 
ERROR: invalid value for parameter "TimeZone": "blah" 
+0

Ja, ich kann es im interaktiven Modus tun, aber ich möchte nicht interaktiv, dh zu Führen Sie mit -c aus. – dfrankow

+0

Richard, es funktioniert für vorübergehend, wenn ich das SQL-Fenster schließe, dann es auf das alte zurück, können Sie dauerhafte Lösung –

+0

@chintan, dies ist wirklich eine separate Frage, aber Sie können "ALTER USER" oder "ALTER DATABASE "Konfiguration dauerhaft einstellen. –

12

ALTEN USER postgres SET Zeitzone = 'Asien/Tokio';

+1

Das funktionierte für mich mit Amazon RDS ohne Neustart erforderlich. Danke! –

+0

Gern geschehen! –

0

Beachten Sie, dass viele Drittanbieter-Clients eigene Zeitzoneneinstellungen haben, die alle Postgres-Server- und/oder Sitzungseinstellungen überlappen.

z. wenn Sie mit ‚IntelliJ IDEA 2017,3‘ (oder DataGrips), sollten Sie definieren Zeitzone wie:

'DB source properties' -> 'Advanced' tab -> 'VM Options': -Duser.timezone=UTC+06:00

sonst werden Sie ‚UTC‘ trotz sehen, was Sie irgendwo anders festgelegt haben.