Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Diferencia de horario entre postgresql y sistema operativo

Estas en el tema de Diferencia de horario entre postgresql y sistema operativo en el foro de PostgreSQL en Foros del Web. Hola a todos, tuve un pequeño problema con la hora de mi sistema operativo y con el servidor postgresql. Estuve leyendo y leyendo, hasta que ...
  #1 (permalink)  
Antiguo 25/09/2009, 19:16
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 5 meses
Puntos: 13
Diferencia de horario entre postgresql y sistema operativo

Hola a todos, tuve un pequeño problema con la hora de mi sistema operativo y con el servidor postgresql.
Estuve leyendo y leyendo, hasta que por fin dí con la solución a mi problema.
Pero no encontré nada que me explicara bien cómo solucionar este rollo así que lo publico aquí por si alguien llega a tener este mismo problema.
No soy un experto en postgreSQL así que si alguien de aquí sabe algo mejor no se lo pienso discutir .

Software:
S.O. --> Windows Vista Ultimate SP1
PostgreSQL --> 8.3.4

Planteamiento del problema:
Diferencia de horario entre el S.O. y el servidor postgreSQL. Vivo en Venezuela así que mi horario es GMT -04:30 expresado en segundos sería -16200.

Lo que dice la ayuda de postgreSQL:
timezone (string)
Sets the time zone for displaying and interpreting time stamps. The default is unknown, which means to use whatever the system environment specifies as the time zone. See Section 8.5.3 for more information.


*Section 8.5.3:
A full time zone name, for example America/New_York. The recognized time zone names are listed in the pg_timezone_names view (see Section 44.56). PostgreSQL uses the widely-used zic time zone data for this purpose, so the same names are also recognized by much other software.

*Solo he colocado el párrafo clave para la solución del problema. No he colocado todo lo que dice en esta sección porque es bastante largo, sin embargo, les dejo el link: postgresql.org/docs/8.3/static/datatype-datetime.html. Recuerden, sección 8.5.3

Solución al problema:
Abrir archivo --> postgresql.conf
Parámetro --> #timezone | Nota: El símbolo # indica que es un comentario.
Valor por defecto --> 'unknown'
Valor correcto --> 'America/Caracas'

Antes de configurar:
#timezone = 'unknown'

Después de configurar:
timezone = 'America/Caracas'

Si viven en España, sería como sigue:
timezone = 'Europe/Madrid'

Como se puede observa quité el símbolo de # de la línea para descomentar el parámetro. Las comillas simples si van porque el valor del parámetro es caracter, así que es importante NO omitir el uso de las comillas simples --> ''

Nota final:
En la siguiente ruta ...\postgresql\8.3\share\timezonesets se encuentran los archivos de texto con la configuración por zonas

Si no han entendido algo, no duden en escribir, trataré de responder a la mayor brevedad posible.

Saludo final:
Espero que esto le sea de ayuda para alguien más, que no se quede atorado como yo viendo por donde rayos se configura la hora y por último espero que les haya gustado. Saludos a todos y gracias.
  #2 (permalink)  
Antiguo 26/09/2009, 21:28
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 14 años, 9 meses
Puntos: 360
Respuesta: Diferencia de horario entre postgresql y sistema operativo

gracias. buen aporte.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 27/09/2009, 13:38
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Diferencia de horario entre postgresql y sistema operativo

Muchas gracias! Esa es la idea aportar lo que pueda, mucha gente me ha ayudado así que trato de devolver el favor.
Solo espero que sea realmente útil.

Saludos!
  #4 (permalink)  
Antiguo 29/09/2009, 09:41
Avatar de FiNo  
Fecha de Ingreso: octubre-2004
Ubicación: Costa Rica
Mensajes: 265
Antigüedad: 19 años, 2 meses
Puntos: 1
Respuesta: Diferencia de horario entre postgresql y sistema operativo

También se puede ejecutar esta sentencia y listo:

SET TIME ZONE 'America/Costa_Rica';
__________________
3S-CRM
  #5 (permalink)  
Antiguo 29/09/2009, 15:10
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Diferencia de horario entre postgresql y sistema operativo

Hola FiNo, gracias por el aporte...
Cita:
Iniciado por FiNo Ver Mensaje
También se puede ejecutar esta sentencia y listo:

SET TIME ZONE 'America/Costa_Rica';
...yo probé con ese comando, el problema es que cuando reinicio el servidor, éste pierde el estado, o sea, que se vuelve a desconfigurar la hora, en cambio desde el archivo postgresql.conf cada vez que se inicia o reinicia el servidor este carga automáticamente la configuración guardada.

Aun así no está de más ponerlo aquí, gracias y saludos.
  #6 (permalink)  
Antiguo 15/09/2010, 09:01
 
Fecha de Ingreso: diciembre-2007
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Diferencia de horario entre postgresql y sistema operativo

Tengo un problema, vivo en Guayaquil Ecuador, ya cambie en el Postgresql.conf timezone='America/Guayaquil'. pero cuando me conecto con algun cliente y pongo select now() me obtiene la fecha adelantada por algunas horas, cuando pongo show timezone me aparece gtm, si en el cliente (pgadmin, sql manager for postgres) hago set time zone 'America/Guayaquil' y luego pongo select now(), me aparece bien, pero eso lo hace solo en el cliente, y como tengo campos en los cuales la fecha es timestamp y cuyo valor es now(), me sale la fecha cambiada al crear registros, no entiendo porque si esta hecho el cambio en el archivo de postgresql.conf porque no sale?, dependerá tambien de la base? porque tengo en el mismo servidor algunas bases de datos, será que se puede cambiar el timezone por base?

El servidor es opensuse con postgres 8.3
La base esta en /usr/local/pgsql/data


Gracias por la ayuda
  #7 (permalink)  
Antiguo 15/09/2010, 12:25
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Diferencia de horario entre postgresql y sistema operativo

Hola yoMax,
Cita:
Iniciado por yoMax Ver Mensaje
Tengo un problema, vivo en Guayaquil Ecuador, ya cambie en el Postgresql.conf timezone='America/Guayaquil'. pero cuando me conecto con algun cliente y pongo select now() me obtiene la fecha adelantada por algunas horas, cuando pongo show timezone me aparece gtm, si en el cliente (pgadmin, sql manager for postgres) hago set time zone 'America/Guayaquil' y luego pongo select now(), me aparece bien, pero eso lo hace solo en el cliente, y como tengo campos en los cuales la fecha es timestamp y cuyo valor es now(), me sale la fecha cambiada al crear registros, no entiendo porque si esta hecho el cambio en el archivo de postgresql.conf porque no sale?, dependerá tambien de la base? porque tengo en el mismo servidor algunas bases de datos, será que se puede cambiar el timezone por base?

El servidor es opensuse con postgres 8.3
La base esta en /usr/local/pgsql/data


Gracias por la ayuda
Si dices que al ejecutar el comando "SHOW timezone;" te aparece gtm me parece que entonces no está bien configurado, fíjate el resultado que me devuelve a mi el servidor cuando ejecuto el mismo comando:
Código SQL:
Ver original
  1. SHOW timezone;
  2.     TimeZone
  3. -----------------
  4.  America/Caracas
  5. (1 fila)

Como puedes comprobar me devuelve el valor correcto para mi zona horaria, así que vamos a revisar la configuración, te adjunto dos imágenes para que veas:
  1. La primera imagen es para indicar cómo abrir el "Backend configuration edition" con el archivo postgresql.conf.
  2. Buscas el archivo postgresql.conf y lo abres.
  3. Ahora fíjate en la siguiente imagen, (lo tengo resaltado en azul), mira como tengo configurado el timezone y fíjate que lo tengo activo.
  4. Si lo tienes mal, corrígelo según tu zona --> 'America/Guayaquil' y activa la casilla.
  5. Ahora reinicia el servicio postgreSQL.
  6. Ejecuta el comando de nuevo como sigue:
    Código SQL:
    Ver original
    1. SHOW timezone;
    2.     TimeZone
    3. -----------------
    4.  America/Caracas
    5. (1 fila)
  7. Si te devuelve 'America/Guayaquil' en vez de GTM entonces ya debería estar bien.

Si sigues con el problema pues tendré que seguir pensando porque de momento no se me ocurre que otra cosa puede pasar.
Por lo que he leido en el archivo America.txt, desde Ecuador en todo caso que no te devuelva 'America/Guayaquil' te deberia devolver ECT no GTM, te copio tal cual como está en el documento:
Código:
ECT    -18000    # Ecuador Time
                 # Eastern Caribbean Time
                 #     (America/Guayaquil)
El archivo postgresql.conf es un archivo de configuración para todo el servidor y que yo sepa todas las bases de datos que estén dentro del servidor dependerán del archivo, ahora tal vez haya una forma de configurar de forma independiente la zona horaria para cada base de datos, pero si la hay yo de momento no lo sé.

Espero que te sirva de ayuda.

Un cordial saludo.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]
  #8 (permalink)  
Antiguo 15/09/2010, 13:31
 
Fecha de Ingreso: diciembre-2007
Mensajes: 9
Antigüedad: 16 años
Puntos: 0
Respuesta: Diferencia de horario entre postgresql y sistema operativo

Gracias por la ayuda,

Te cuento un poco mas, los inserts vienen desde el servidor web que esta ahi mismo, por lo que el cambio del set time zone, no puedo hacerlo.

Te copio el fragmento del postgresql.conf, en el cual esta seteadas las opciones

Cita:

#------------------------------------------------------------------------------
# CLIENT CONNECTION DEFAULTS
#------------------------------------------------------------------------------

# - Statement Behavior -

#search_path = '"$user",public' # schema names
#default_tablespace = '' # a tablespace name, '' uses the default
#temp_tablespaces = '' # a list of tablespace names, '' uses
# only default tablespace
#check_function_bodies = on
#default_transaction_isolation = 'read committed'
#default_transaction_read_only = off
#session_replication_role = 'origin'
#statement_timeout = 0 # 0 is disabled
#vacuum_freeze_min_age = 100000000
#xmlbinary = 'base64'
#xmloption = 'content'

# - Locale and Formatting -

#datestyle = 'iso, dmy'
#datestyle = 'SQL, DMY'

datestyle = 'iso, dmy'
timezone = 'America/Guayaquil'
#timezone = 'default'
#timezone = unknown # actually, defaults to TZ environment
# setting
#timezone_abbreviations = 'Default' # Select the set of available time zone
# abbreviations. Currently, there are
# Default
# Australia
# India
# You can create your own file in
# share/timezonesets/.
#extra_float_digits = 0 # min -15, max 2
#client_encoding = sql_ascii # actually, defaults to database
# encoding

# These settings are initialized by initdb, but they can be changed.
lc_messages = 'es_ES.UTF-8' # locale for system error message
# strings
lc_monetary = 'es_ES.UTF-8' # locale for monetary formatting
lc_numeric = 'es_ES.UTF-8' # locale for number formatting
lc_time = 'es_ES.UTF-8' # locale for time formatting

# default configuration for text search
default_text_search_config = 'pg_catalog.spanish'

# - Other Defaults -

#explain_pretty_print = on
#dynamic_library_path = '$libdir'
#local_preload_libraries = ''


Prefiero reiniciar el servidor que solo el servicio ya que como lo hice a mano, no confio mucho jejeje. este es el script en /etc/init.d/postgresql




Cita:
case "$1" in
'start')
sudo -u postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data >logfile 2>&1 &
echo "Base de Datos iniciada"
;;
'stop')
#kill `cat /usr/local/pgsql/data/postmaster.pid`
killproc /usr/local/pgsql/data/postmaster.pid
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0
  #9 (permalink)  
Antiguo 15/09/2010, 13:53
Avatar de xdrtas  
Fecha de Ingreso: junio-2008
Ubicación: Venezuela
Mensajes: 97
Antigüedad: 15 años, 5 meses
Puntos: 13
Respuesta: Diferencia de horario entre postgresql y sistema operativo

Cita:
Iniciado por yoMax Ver Mensaje
Gracias por la ayuda,

Te cuento un poco mas, los inserts vienen desde el servidor web que esta ahi mismo, por lo que el cambio del set time zone, no puedo hacerlo.

Te copio el fragmento del postgresql.conf, en el cual esta seteadas las opciones

Prefiero reiniciar el servidor que solo el servicio ya que como lo hice a mano, no confio mucho jejeje. este es el script en /etc/init.d/postgresql
Me parece que ya veo el problema, tienes varios timezone y varios datestyle, borra los timezone y los datestyle que te sobren, los que tienes comentados. No debe haber más de un parámetro timezone ni datestyle.

Luego reinicia de nuevo el servidor.

Un cordial saludo.
__________________
¿Cuál es el mejor lenguaje para programar?
Aquel lenguaje por el cual te paguen más.
[--::xdrtas.coolpage.biz::--]
[---:::xdrtas:::---]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:50.