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