まずタイムゾーンとは何かを知りましょう。
timestamp に付与されていセッション単位のパラメータで、セッションが実行するクエリに影響を与えます。
このタイムゾーン設定があることで、データベースに保存されているタイムゾーン付きデータをセッションのタイムゾーンに合わせて表示を変更したり出来ます。
デフォルトでは DB の設定ファイル(postgres.conf)に設定しているタイムゾーンで表示します。
設定ファイルは UTC(世界標準時)で設定さているのが一般的です。
使うクエリ
早速、日時データのタイムゾーンを JST に変更して抽出するクエリの一例をご紹介します。
SELECT '2018-09-02 07:09:19'::timestamp AT TIME ZONE 'UTC' AT TIME ZONE 'Asia/Tokyo';
この日時データの後の”AT TIME ZONE 'タイムゾーン'”の部分がタイムゾーンを変更します。
UTC は協定世界時、Asia/Tokyo は日本標準時(JST)を意味します。
このクエリは'2018-09-02 07:09:10'という日時データを日本標準時のタイムゾーンに変更して表示しています。
これを実行すると以下のように表示されます。