2012-08-02 37 views
22

¿Cómo configuro la zona horaria para psql en algo distinto a mi valor predeterminado (EE. UU./Central)? Aquí es lo que he probado hasta ahora:¿Cómo configurar la zona horaria para 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 

Edición: No quiero cambiar la zona horaria del servidor, sólo el cliente.

Edit # 2: Lo quiero en modo no interactivo.

+0

Cambiar la zona horaria se debe hacer utilizando la ** instrucción SQL ** 'establecida', no a través de comandos psql (ver la respuesta de Richard) –

Respuesta

16

El doc psql 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.... 

Pero con la zona horaria no parece que funciona, tal vez porque debido a esto:

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

Por lo tanto, parece que o bien debe use el comando SET dentro de psql, o bien configure la variable de entorno PGTZ:

PGTZ=PST8PDT psql -c 'show timezone' 

Por supuesto, si estás bien con la configuración de la zona horaria a nivel mundial para el usuario (no sólo para esta instancia psql individuales), podría establecer esa variable en el archivo de .bashrc (si está en Linux)

+0

PGTZ para la victoria! – dfrankow

+1

Tenga en cuenta que no necesita exportarlo. En el prompt de bash ejecute: PGTZ = US/Eastern psql -c 'show timezone' – dfrankow

+0

@dfrankow tiene toda la razón, lo solucioné – 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í, puedo hacerlo en modo interactivo, pero no quiero interactiva, es decir, correr con -c. – dfrankow

+0

Richard, Funciona temporalmente, cuando cierro el panel SQL y luego retrocede al anterior, puede proporcionar la solución permanente –

+0

@chintan, esta es realmente una pregunta separada, pero puede usar "ALTER USER" o "ALTER DATABASE "para establecer la configuración de forma permanente. –

12

postgres MODIFICAR USUARIO SET timezone = 'Asia/Tokyo';

+1

Esto funcionó para mí con Amazon RDS sin necesidad de reiniciar. ¡Gracias! –

+0

¡de nada! –

0

Tenga en cuenta que muchos clientes de terceros tienen su propia configuración de zona horaria que se superpone con cualquier servidor de Postgres y \ o configuraciones de sesión.

E.g. si utiliza 'IntelliJ IDEA 2017.3' (o DataGrips), debe definir la zona horaria como:

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

de lo contrario se verá 'UTC' a pesar de lo que han establecido en otro sitio.

Cuestiones relacionadas