2013-10-07 96 views
2
prompt$ date 

Mon Oct 7 17:32:24 UTC 2013 

prompt$ psql -U postgres 

postgres=# show timezone; 

TimeZone 
---------- 
GMT 
(1 row) 

postgres=# select now(); 

       now 
------------------------------- 
2013-10-07 20:32:42.354384+03 
(1 row) 

爲什麼它以+03時區格式返回它?我在這裏顯然想念什麼?Postgres now()返回+03時區,但顯示時區返回GMT

編輯:我解決了這個問題,但問題仍然存在。這是發生了什麼:

我已經改變了系統的操作系統時區,而不重新啓動postgres服務器。之前的操作系統時區確實是+03。重新啓動postgres後,它正常運行。但是這是一個奇怪的情況:postgresql.conf沒有明確定義任何時區,並且客戶端(psql)應該始終輸出由「show timezone」報告的時區中的時間戳。所以仍然有這個無法解釋的問題:

爲什麼psql報告GMT作爲時區設置,但在OS新時區中顯示時間戳。這是預期的行爲?

+0

我已經解決了這個問題,但仍不滿意,我看到的行爲。查看我的編輯 – Paralife

+0

除非在postgresql.conf中配置了時區,否則將使用系統默認時區 - 在postgresql服務器啓動時配置的時區。 「psql」將根據「時區」設置(默認值==服務器的默認值)顯示timestamptz-s,無論客戶的時區選擇如何。 還有一件事:小心ALTER USER ...設置時區爲'...'; – IggShaman

回答

1

這確實是很奇怪的行爲,很大程度上是因爲我期望show timezone顯示與now()顯示的相同時區。我的建議是嘗試重現這種情況,然後通過電子郵件發送PostgreSQL列表或提交錯誤報告。這聽起來像你可能能夠通過在PostgreSQL運行時改變你的系統時區來解決這個問題。重新加載或重新啓動可能會解決問題。

我還的第二觀看了爲ALTER USER ... SET TIMEZONE的概念,但最重要的是,你還可以ALTER DATABASE ... SET TIMEZONE甚至ALTER FUNCTION ... SET TIMEZONE

相關問題