O valor padrão para a configuração TimeZone
foi alterado na versão 9.2:
(..) If not explicitly set, the server initializes this variable to the time zone specified by its system environment. (...)
(...) The built-in default is GMT, but that is typically overridden in postgresql.conf; initdb will install a setting there corresponding to its system environment. (...)
O que significa que, antes da versão 9.2, o valor padrão em postgresql.conf
deveria ser definido durante initdb
phase. Se você tiver substituído esse valor (provavelmente copiando o antigo postgresql.conf
ao atualizar de versões mais antigas), o PostgreSQL usará o valor "GMT" como padrão.
A solução para o seu caso é bastante simples, basta alterar a configuração TimeZone
em postgresql.conf
para o valor desejado:
TimeZone = 'Europe/Vienna'
Depois disso, você precisa reload
do serviço:
# su - postgres -c "psql mydb -c 'SELECT pg_reload_conf()'"
Em seguida, todos os campos armazenados como timestamp with time zone
(ou timestamptz
) serão exibidos corretamente a partir de agora. Mas você terá que corrigir com a mão todos (atualizar) os campos armazenados como timestamp without time zone
(ou timestamp
).
Uma dica que dou para todos atualizar o PostgreSQL é não copiar o antigo postgresql.conf
para o novo cluster (note que não tenho certeza se foi o que você fez, mas eu vi muito esse mesmo problema por causa disso) . Basta pegar o gerado por initdb
e adicionar as modificações (uma ferramenta diff
pode ser útil para essa tarefa).