2012-08-02 15 views
22

Come si imposta il fuso orario per psql su un valore diverso da quello predefinito (Stati Uniti/Centrale)? Ecco quello che ho provato finora:Come impostare il fuso orario per Postgres psql?

$ 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 

Edit: Io non voglio cambiare il fuso orario del server, solo il cliente.

Modifica # 2: Lo vorrei in modalità non interattiva.

+0

La modifica del fuso orario deve essere eseguita utilizzando l'istruzione ** SQL ** 'set', non tramite i comandi psql (vedere la risposta di Richard) –

risposta

16

Il psql dottore dice:

-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.... 

Ma con il fuso orario non sembra funzionare, forse perché a causa di questo:

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

così, sembra che si deve o utilizzare il comando SET all'interno di psql o impostare la variabile di ambiente PGTZ:

PGTZ=PST8PDT psql -c 'show timezone' 

Naturalmente, se siete OK con l'impostazione del fuso orario a livello globale per l'utente (non solo per questo individuo esempio psql), è possibile impostare la variabile nel suo file .bashrc (se in Linux)

+0

PGTZ per la vittoria! – dfrankow

+1

Nota che non è necessario esportarlo. Al prompt bash prompt: PGTZ = US/Eastern psql -c 'show timezone' – dfrankow

+0

@dfrankow hai perfettamente ragione, ho corretto che – 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

Sì, posso farlo in modalità interattiva, ma voglio non interattivo, cioè per corri con -c. – dfrankow

+0

Richard, Funziona temporaneamente, quando chiudo il riquadro SQL, quindi torna a quello vecchio, puoi fornire la soluzione permanente –

+0

@chintan, questa è davvero una domanda a parte, ma puoi usare "ALTER USER" o "ALTER DATABASE "per impostare la configurazione in modo permanente. –

12

ALTER utente postgres SET timezone = 'Asia/Tokyo';

+1

Questo ha funzionato per me con Amazon RDS senza riavvio richiesto. Grazie! –

+0

prego! –

0

Nota molti client di terze parti hanno proprie impostazioni di fuso orario che si sovrappongono a qualsiasi server Postgres e \ o impostazioni di sessione.

E.g. se si sta utilizzando 'IntelliJ IDEA 2.017,3' (o DataGrips), è necessario definire fuso orario come:

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

altrimenti si vedrà 'UTC' nonostante tutto ciò che è stato impostato in qualsiasi altro luogo.

Problemi correlati