Estou usando o PgAdmin 4 v6 e, para alguns dados de timestamp com tipo de dados timestamp with time zone
, estou vendo no PgAdmin assim:
2022-03-06 16:11:33+04
Por que o +04
ser exibido?
Eu olhei para o seguinte guia postgres:
Afirma o seguinte:
Todas as datas e horas com reconhecimento de fuso horário são armazenadas internamente em UTC. Eles são convertidos para a hora local na zona especificada pelo parâmetro de configuração TimeZone antes de serem exibidos ao cliente.
A referência aqui afirma o seguinte sobre a configuração do TimeZone no Postgres:
TimeZone (string)
Define o fuso horário para exibir e interpretar carimbos de hora. O padrão integrado é GMT, mas normalmente é substituído em postgresql.conf; O initdb instalará uma configuração correspondente ao ambiente do sistema.
Isso sugere que um fuso horário derivado de alguma forma do sistema host do banco de dados está sendo adicionado ao postgresql.conf.
Presumo que a razão pela qual vejo o deslocamento no PgAdmin é que o PgAdmin está exibindo uma versão convertida do valor armazenado, com base nas informações de fuso horário para o sistema host do banco de dados, que foi armazenado em postgresql.conf. Alguém pode confirmar se é isso que o PgAdmin faz quando exibe dados com tipo de dados timestamp with timezone
?
Estou em Dublin - atualmente em UTC/GMT.
Eu fiz o seguinte:
então
Então, no pgAdmin, eu
SELECT * FROM t
e o valor que vejo éObserve o fuso horário: 2022-03-09 05:15:02.899933
+00
- porque estou em UTC/GMT.Multar. Eu verifico o meu
postgresql.conf
e eu tenhotimezone = 'Europe/Dublin'
.Para verificar novamente, eu olho para a linha de comando:
Então, cinto e suspensórios:
Observe o
short_desc
campo:Agora, eu edito meu
postgresql.conf
e mudo o fuso horárioAmerica/Los_Angeles
e reinicio meu servidor!Agora, se eu fizer
SELECT * FROM t;
isso me dá:Compare isso com
2022-03-09 05:15:02.899933+00
- eles são ao mesmo tempo - apenas exibidos de maneira diferente - devido inteiramente à minhapostgresql.conf
configuração!Presumivelmente, isso é para que os tempos exibidos sejam significativos para aqueles que os observam. As pessoas não pensarão que têm compromissos no meio da noite etc. Pode ser fácil pular a parte do fuso horário de um datetime/timestamp exibido se não estiver acostumado com eles.
Eu posso pensar em um exemplo de onde pode ser uma boa ideia ter a exibição sempre em UTC/Zulu e isso é na aviação civil onde todos os tempos são sempre dados em Zulu (você verá frequentemente YYYY-MM-DD HH: MM:SS
Z
escrito).Responda:
Sim, é a
timezone
configuração empostgresql.conf
que determina a exibição do tempo para você! OTIMESTAMPTZ
valor é imutável!Você diz:
Quando instalei o Windows nesta máquina, escolhi o fuso horário para o PC
Dublin, Edinburgh, Lisbon, London
e quando instalei o PostgreSQL, o fuso horáriopostgresql.conf
estava definido comoEurope/London
- redefino paraEurope/Dublin
. O PostgreSQL obviamente faz o que pensa ser o melhor palpite com base nas configurações do seu sistema. No entanto, como você pode ver acima, é fácil mudar isso.