2011-07-12 11 views
35

私はPostgreSQL 9をインストールしました。表示されている時間はサーバ時間より1時間遅れています。postgresのデフォルトタイムゾーン

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

サーバの日付ショー:タイムゾーンその他、各種/ GMT0

:12時51分40秒BST 2011

それは1時間遅れているが、phppgadminに示したタイムゾーンがある7月12日(火)

私はpostgresql.confに行き、timezone = GMTを設定して、再起動しても変更は行わないことを試みました。

私はそれがちょうどサーバーのタイムゾーンを使用したと思ったアイディアはありますが、明らかにそうではありませんか?

解決方法: 私はGMTに前に設定しました。それは1時間遅れです。周りを検索した後、ヨーロッパ/ロンドンに設定する必要がありました。これは英国の夏時間で+1時間を考慮に入れ、GMTはそうしません!

答えて

42

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

the docを参照してください。 SQL標準以下

set timezone TO 'GMT'; 

あるいは、より密接に、SET TIME ZONEコマンドを使用します。上記のコードが単一の単語 "タイムゾーン"を使用する "TIME ZONE"の2つの単語に注目してください。

SET TIME ZONE 'UTC'; 

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

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

+0

私はそれを設定しようとしましたが、それは動作していないようで、アクティブセッション用にのみ設定しています。私は永久にすべてのデータベースのためにそれを変更したい、私はこれを簡単にphpmyadminでやったが、ポストグラムのためにそれを行う方法を見つけることができない –

+0

ええ '設定タイムゾーンTo ..'現在のセッションのタイムゾーンを設定し、 Postgresql.confのtimezone設定パラメータでは、すべてのデータベースのタイムゾーンを変更する必要があります。 –

+4

postgresql.confでタイムゾーンをGMTに変更しようとしましたが、正常に動作しているようです。 –

33

あなたがしなければならないのPostgres 9.1におけるタイムゾーンの変更をacomplishするには、次のappropiateファイルの/usr/share/postgresql/9.1/であなたの「タイムゾーン」フォルダ内の

1.-を検索、私の中にケースは "America.txt"となります。その中に、あなたのゾーンに最も近い場所を検索し、左の列の最初の文字をコピーします。例えば

:あなたのpostgresql.confファイルとプットで「タイムゾーン」ライン

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

2.-コメントを解除:あなたは「ニューヨーク」や「パナマ」であるならば、それは「EST」になります示すように、あなたのタイムゾーン:

#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

+1

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

+10

**これら3つまたは4つの文字コードは避けてください**。彼らは標準化されておらず、ユニークでもありません代わりに[適切なタイムゾーン名](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)(大陸のSLASH都市または地域)を使用してください。あなた自身の例を使用するために、パナマは年間を通して-05:00のオフセットを使いますが、ニューヨークは夏時間(DST)で1時間シフトします。タイムゾーンはオフセット以上です。タイムゾーンには、DSTなどの過去、現在、および将来のルールおよび異常のセットが含まれます。だから、アメリカ/パナマ、アメリカ/ニューヨーク、ヨーロッパ/ロンドン、UTC(またはズールー)の意味を言います。 –

+0

[PostGRE docs](http://www.postgresql.org/docs/9.1/static/datatype-datetime.html#DATATYPE-TIMEZONES)によれば、内部ビューをチェックして、認識されたタイムゾーンのリストを取得することができますサードパーティのサイトがあなたのものと同じくらい最新のものであるとは限りません。あなたの特定のデータベースの名前は、おそらくもっと安全な '' SELECT * FROM pg_timezone_names'''を実行することで特定のデータベースインスタンス。 – SeldomNeedy

13

accepted answerによるMuhammad Usamaが正しいです。答え

設定パラメータ名

は、以下ではPostgres固有の設定パラメータを設定する方法を示しています。

SET timezone TO 'UTC'; 

... timezoneは、SQLコマンドでない場合、それは設定の名前ですパラメータ。

the doc for thisを参照してください。 SET TIME ZONE

標準のSQLコマンドは

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

SET TIME ZONE 'UTC'; 

このコマンドと上記の両方のコマンドは、現在のセッションの値のみを設定するのと同じ効果があります。変更を永久にするには、sibling answerを参照してください。

the doc for thisを参照してください。

タイムゾーン名

あなたはproper time zone nameを指定することができます。これらのほとんどは大陸/地域です。

SET TIME ZONE 'Africa/Casablanca'; 

...か...

SET TIME ZONE 'America/Montreal'; 

彼らは、標準化もユニークでもないとして3または4文字などESTISTなど略語を避けてください。

セッションの現在のタイムゾーンを表示するには、現在のゾーン

を取得し、次のステートメントのいずれかを試してみてください。技術的には、SHOWコマンドを呼び出して実行時パラメータを表示します。

SHOW timezone ; 

...か...

SHOW time zone ; 

米国/太平洋

+0

' SHOW'部分を提供するための唯一の回答であるためのボーナスポイント –

17

からタイムゾーンを選択します。

SELECT * FROM pg_timezone_names; 

と例を設定します。

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

DB名を使用してください。あなたはタイムゾーンを設定することができますpgAdmin IIIこのツールを使用する場合、以前の回答に加えて

+0

postgresqlサービスを再起動する必要があります。 –

+6

@JoeyPinto not true、発行するだけで十分です'SELECT pg_reload_conf();' :) – Alphaaa

7

は、次のように:

  1. オープンPostgresの設定ツール経由> [サーバーの構成]> [postgresql.confの
  2. ルックエントリタイムゾーンとダブルクリックして開きます
  3. 値を変更します
  4. 設定変更を適用するためにリロードサーバトップやサービス経由でのトン)

Postgres config in pgAdmin III

0

注多くのサードパーティクライアントは、自身の任意のPostgresのサーバーと\を重ねるタイムゾーンの設定やセッション設定を持っています。

など。

'DBソースプロパティ' - > '詳細設定'タブ - > 'VMオプション'のように、 'IntelliJ IDEA 2017.3'(またはDataGrips)を使用している場合は、-Duser.timezone = UTC + 06:00

それ以外の場合は、他の場所に設定したものの「UTC」と表示されます。

0

質問には関係ないかもしれませんが、CSTを使用してシステムタイムゾーンを希望のtz(America/...)に設定し、postgresql confでタイムゾーンの値を 'localtime'に設定してください(postgresql 9.5、Ubuntu 16)

関連する問題