中部標準時のサーバーにインストールされたpostgresdbをセットアップして、すべてのタイムスタンプ列が中部標準時になるようにしました。
postgresでデータベースのすべてのタイムゾーン列をCSTからGMTに変更する方法はありますか?GMTを使用するようにデータベースを構成することはベストプラクティスですか?
中部標準時のサーバーにインストールされたpostgresdbをセットアップして、すべてのタイムスタンプ列が中部標準時になるようにしました。
postgresでデータベースのすべてのタイムゾーン列をCSTからGMTに変更する方法はありますか?GMTを使用するようにデータベースを構成することはベストプラクティスですか?
ベストプラクティスは、TIMESTAMP
タイムゾーンについて何も知らないタイプの使用を避け、タイムスタンプを格納するために常にタイプTIMESTAMPTZ
(の略)を使用することです。TIMESTAMP WITH TIME ZONE
TIMESTAMPTZ
UTC
タイムスタンプと、タイムスタンプが最初に書き込まれたタイムゾーン(、、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
、サーバーまたはクライアントのタイムゾーン設定(デフォルトでは現在のオペレーティングシステムのタイムゾーン設定)は、データ操作が常に正しいため、表示目的でのみ役立ちます。