0

中部標準時のサーバーにインストールされたpostgresdbをセットアップして、すべてのタイムスタンプ列が中部標準時になるようにしました。

postgresでデータベースのすべてのタイムゾーン列をCSTからGMTに変更する方法はありますか?GMTを使用するようにデータベースを構成することはベストプラクティスですか?

4

1 に答える 1

1

ベストプラクティスは、TIMESTAMPタイムゾーンについて何も知らないタイプの使用を避け、タイムスタンプを格納するために常にタイプTIMESTAMPTZ(の略)を使用することです。TIMESTAMP WITH TIME ZONE

TIMESTAMPTZUTCタイムスタンプと、タイムスタンプが最初に書き込まれたタイムゾーン(、、CSTなどPST)の両方を格納しGMT+6ます。これにより、現在のサーバーまたはクライアントのタイムゾーン設定に関係なく、これらの列を常に正しく操作および表示できます。

次のようなものを使用して、既存のTIMESTAMP列をTIMESTAMPTZに変換できるはずです。

ALTER TABLE mytable ALTER COLUMN old_tstamp TYPE TIMESTAMPTZ

これを行う前に、タイムゾーン情報がデータに保持されるように、TIMESTAMPからTIMESTAMPTZへの変換が実際にどのように機能しているかについて、小さなデータセットまたは小さなテストテーブルで実験する必要があります。

変換が正しく機能しない場合は、次のようなステートメントを使用して、現在のセッションのタイムゾーンを一時的に設定できます(変換の目的でのみ必要ですALTER TABLE ... COLUMN ... TYPE)。

SET timezone TO 'CST6CDT';

また

SET timezone TO 'UTC+6';

これは、後続の操作とからTIMESTAMPへの変換に影響TIMESTAMPTZします。正しく設定してください。

すべてのタイムスタンプをに変換した後TIMESTAMPTZ、サーバーまたはクライアントのタイムゾーン設定(デフォルトでは現在のオペレーティングシステムのタイムゾーン設定)は、データ操作が常に正しいため、表示目的でのみ役立ちます。

于 2013-02-20T10:56:26.707 に答える