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 サーバーを再起動せずに、システムの OS タイムゾーンを変更しました。以前の OS のタイムゾーンは確かに +03 でした。postgres を再起動した後、正常に動作しました。しかし、これは奇妙な状況です: postgresql.conf にはタイムゾーンが明示的に定義されておらず、クライアント (psql) は常に「show timezone」によって報告されたタイムゾーンでタイムスタンプを出力する必要があります。したがって、この説明のつかない質問がまだあります。

psql がタイムゾーン設定として GMT を報告していたのに、OS の新しいタイムゾーンでタイムスタンプを表示した理由。これは予想される動作ですか?

4

1 に答える 1

1

show timezoneこれは確かに奇妙な動作です。これは主に、now() が示したのと同じタイムゾーンを表示することを期待していたからです。状況を再現してから、PostgreSQL リストに電子メールを送信するか、バグ レポートを提出することをお勧めします。PostgreSQL の実行中にシステムのタイムゾーンを変更することで、これを引き起こすことができるようです。リロードまたは再起動すると、問題が解決する場合があります。

に注意するという考えも支持しますが、それに加えて、ALTER USER ... SET TIMEZONE次のこともできます。ALTER DATABASE ... SET TIMEZONEALTER FUNCTION ... SET TIMEZONE

于 2013-11-25T13:43:40.493 に答える