6

異なるタイムゾーンの異なるサーバーで 2 つのデータベースを実行しています。を含むテーブルがいくつかありますtimestamp with timezone

あるデータベースからデータをダンプし、正しいタイムスタンプと正しいタイムゾーンで別のデータベースにインポートする必要があります。

次のコマンドを使用してデータをダンプします。

pg_dump -a DB_NAME > dump.sql

データが古いタイムスタンプとタイムゾーン形式になっていることがわかります。2013-11-29 14:30:00+02

次に、コマンドを使用して別のサーバーにダンプを復元します。

psql -d DB_NAME -f dump.sql

そして、タイムスタンプとタイムゾーンが古いサーバーのものであることがわかります-これは正常だと思います。

次に、dump.sqlの先頭に次のコマンドを入れようとしました

SET timezone ...

しかし、まだ機能しません。:(

これは 1 回の操作です。転送されたデータは同期する必要はありません。pg_dump や pg_restore などを使用してこのような変換を行う方法はありますか?

4

1 に答える 1

7

timstamptzデータ型( = )の Postgres は、timestamp with time zone値を UTC タイムスタンプ (2000 年からのマイクロ秒をカウントする整数値) として内部的に保存します。これは、それらの値が表示されるタイムゾーンに依存しません。名前を誤解していると思われるようなタイムゾーン情報は保存されません。必要なだけダンプして復元できます。

クライアントに表示される内容は、セッションのタイムゾーン設定によって異なります。

実行します (アーティファクトを避けるために同じセッションで):

SHOW timezone;

表示された場合localtime、Postgres はサーバー OS のデフォルト設定を使用しています。

別のタイム ゾーンを設定して ( とのセッションでSET timezone = ...;、ユーザーに対して、または構成ファイルでグローバルに)、タイムスタンプの形式が異なるようにします。この場合、ダンプ ファイルのタイム ゾーン設定は影響しないことに注意してください。現在のセッションの設定のみが影響します。

この関連する回答の詳細な説明:

環境変数を設定するさまざまな方法について:

于 2013-11-29T17:12:01.703 に答える