postgresのデフォルトのタイムゾーン


99

インストールPostgreSQL 9したところ、表示されている時間はサーバー時間より1時間遅れています。

Select NOW()ショーの実行:2011-07-12 11:51:50.453842+00

サーバーの日付は次のとおりです。 Tue Jul 12 12:51:40 BST 2011

1時間遅れていますが、に示すタイムゾーンphppgadminは次のとおりです。TimeZone Etc/GMT0

postgresql.confと設定に行ってみました

タイムゾーン= GMT

その後、再起動を実行しますが、変更はありません。

サーバーのタイムゾーンを使用しただけだと思ったアイデアはありますか?

解決策!:GMT前に設定しましたが、1時間遅れていました。周りを検索した後、それをに設定する必要があることがわかりましたEurope/London。これはイギリスの夏時間の+1時間を考慮に入れていますが、GMTは考慮していません。

回答:


113

タイムゾーンはセッションパラメータです。したがって、現在のセッションのタイムゾーンを変更できます。

ドキュメントを参照してください。

set timezone TO 'GMT';

または、SQL標準に従って、SET TIME ZONEコマンドを使用します。上記のコードが「timezone」という単一の単語を使用する「TIME ZONE」の2つの単語に注意してください。

SET TIME ZONE 'UTC';

ドキュメントは違いを説明しています:

SET TIME ZONEは、SQL標準で定義されている構文を拡張します。標準では数値のタイムゾーンオフセットのみが許可されていますが、PostgreSQLではより柔軟なタイムゾーン指定が許可されています。他のすべてのSET機能はPostgreSQLの拡張機能です。


2
私はそれを設定しようとしましたが、それは機能していないようで、アクティブなセッションに対してのみ設定されていません。私はphpmyadminで簡単にこれを変更したいのですが、postgresqlでそれを行う方法を見つけられないようです
Blu Towers

yup 'set timezone To ..'は現在のセッションのタイムゾーンのみを設定し、Postgresql.confのタイムゾーン構成パラメーターを変更すると、すべてのデータベースのタイムゾーンが変更されます。
ムハンマドウサマ

4
postgresql.confでタイムゾーンをGMTに変更してみましたが、正常に動作しているようです。
ムハンマドウサマ

より標準(SQL仕様に準拠)は、「TIME ZONE」の2つの単語ですSET TIME ZONE 'UTC';ドキュメントを参照してください。
Basil Bourque 2014

102

timezoneから選択してください:

SELECT * FROM pg_timezone_names;

そしてset以下の例のように:

ALTER DATABASE postgres SET timezone TO 'Europe/Berlin';

postgres上記のステートメントの代わりにDB名を使用します。


4
これが完了したらpostgresqlサービスを再起動する必要があります
Joey Pinto

24
@JoeyPintoは真実ではありません、それは発行するのに十分ですSELECT pg_reload_conf();:)
Alphaaa

4
私は自分のデータベース名で文を実行し、SELECT pg_reload_conf()trueを返したが、now()およびselect current_setting('TIMEZONE')「アメリカ/ニューヨーク」の値を返すように続けています。私はスーパーユーザーではないからですか?
Noumenon

48

Postgres 9.1でのタイムゾーンの変更を達成するには、以下を行う必要があります。

1.- /usr/share/postgresql/9.1/の「timezones」フォルダで適切なファイルを検索します。私の場合は「America.txt」になります。このファイルで、ゾーンに最も近い場所を検索し、左の列の最初の文字。

例:「ニューヨーク」または「パナマ」にいる場合、「EST」になります。

#  - EST: Eastern Standard Time (Australia)
EST    -18000    # Eastern Standard Time (America)
                 #     (America/New_York)
                 #     (America/Panama)

2.-postgresql.confファイルの「timezone」行のコメントを外し、次のようにタイムゾーンを入力します。

#intervalstyle = 'postgres'
#timezone = '(defaults to server environment setting)'
timezone = 'EST'
#timezone_abbreviations = 'EST'     # Select the set of available time zone
                                        # abbreviations.  Currently, there are
                                        #   Default
                                        #   Australia

3.- Postgresを再起動します


3
これは、現在のユーザーだけでなく、PGSQLのすべてのプロセスのTZ変更をデフォルトにするため、実際には正しい答えです。
jfreak53

15
これらの3文字または4文字のコードは完全に避けてください。それらは標準化されておらず、ユニークでもありません。代わりに、適切なタイムゾーン名を使用してください(大陸SLASH都市または地域)。独自の例を使用するには、パナマは−05:00一年中オフセットを使用し、ニューヨークは夏時間(DST)で1時間シフトします。タイムゾーンは単なるオフセットではありません。タイムゾーンには、過去、現在、および将来の一連のルールとDSTなどの異常が含まれます。:だから、あなたは何を意味するかと言うAmerica/PanamaAmerica/New_YorkEurope/LondonUTC(あるいはZulu)。
バジルブルク2015

3
PostGREドキュメントに従って、サードSELECT * FROM pg_timezone_namesパーティのサイトが必ずしも最新ではないことを考えると、内部ビューをチェックして、特定のデータベースで認識されているタイムゾーン名のリストを取得できます。 (または古くなった)あなた自身の特定のデータベースインスタンスとして。
SeldomNeedy

私はそのフォルダを共有していませんpostgresql
SuperUberDuper

PostgreSQLを再起動する代わりに、を実行できますselect pg_reload_conf()
ANeves

42

受け入れ答えによってムハンマドウサマは正しいです。

構成パラメータ名

その答えは、Postgres固有の構成パラメータを次のように設定する方法を示しています。

SET timezone TO 'UTC';

timezoneはSQLコマンドではなく、構成パラメータの名前です。

これについてはドキュメントを参照してください。

標準SQLコマンド

または、SQL仕様で定義されているSQLコマンドを使用できますSET TIME ZONE。この構文では、TIME ZONE"timezone"(実際のSQLコマンドとパラメーター名)を2つの単語で置き換え、 "TO"はありません。

SET TIME ZONE 'UTC';

このコマンドと上記のコマンドはどちらも同じ効果があり、現在のセッションのみに値を設定します。変更を永続的にするには、この兄弟の答えを参照してください。

これについてはドキュメントを参照してください。

タイムゾーン名

適切なタイムゾーン名を指定できます。これらのほとんどは大陸/地域です。

SET TIME ZONE 'Africa/Casablanca';

…または…

SET TIME ZONE 'America/Montreal';

3つのまたは4文字避けなどの略語ESTIST、彼らはどちらも標準化されていませもユニークさなどを。タイムゾーン名のリストについては、Wikipediaを参照してください。

現在のゾーンを取得

セッションの現在のタイムゾーンを確認するには、次のいずれかのステートメントを試してください。技術的にはSHOW、実行時パラメーターを表示するコマンドを呼び出しています。

SHOW timezone ;

…または…

SHOW time zone ;

米国/太平洋


4
SHOWパートを提供する唯一の答えであることのボーナスポイント
Ariel Allon 2017

ロジャー、アリエルアロン-そして、そのタイムゾーンを変数に選択したい次の人のために...SELECT current_setting('TIMEZONE')
Wellspring

10

前の回答に加えて、pgAdmin IIIツールを使用する場合は、次のようにタイムゾーンを設定できます。

  1. [ ツール]> [サーバー構成]> [postgresql.conf]からPostgres 構成を開きます
  2. エントリのタイムゾーンを探し、ダブルクリックして開きます
  3. 値を変更する
  4. サーバーをリロードして構成の変更を適用します(上部にあるまたはサービスを介して再生ボタン)

pgAdmin IIIのPostgres設定


3

多くのサードパーティクライアントには、Postgresサーバーやセッション設定と重複する独自のタイムゾーン設定があります。

たとえば、 'IntelliJ IDEA 2017.3'(またはDataGrips)を使用している場合は、タイムゾーンを次のように定義する必要があります。

「DBソースのプロパティ」->「詳細」タブ->「VMオプション」:-Duser.timezone = UTC + 06:00

それ以外の場合は、他の場所で設定したものにかかわらず、「UTC」が表示されます。


それで、これは夏/冬の時間変化と同期を保つ必要がありますか?
Cpt。Senkfuss

1
@ Cpt.Senkfuss、私は-Duser.timezone = Australia / Tasmaniaのようなものも機能し、夏と冬の変更に対処する必要があると信じています。
ARA1307

これはライフセーバーのトリックです。私は何が問題になっているのかを3時間理解できるように努力してきました:)ところで、完全なタイムゾーン名を試してみました。私にとっては-Duser.timezone = Europe / Istanbul
Olgun Kaya

0

多分質問に関連していないかもしれませんが、CSTを使用して、システムのタイムゾーンを目的のtz(アメリカ/ ...)に設定し、postgresql confでタイムゾーンの値を「localtime」に設定すると、チャームとして機能しました、current_timeは適切な時間を印刷します(Ubuntu 16上のPostgresql 9.5)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.