[小ネタ]Redshiftのユーザー別/セッション毎にタイムゾーンを変更してみる

2020.12.02

こんにちはDA部の下地です。

最近、Redshift使用時にユーザー別/セッション毎にタイムゾーンを設定する必要がありました。公式ドキュメント(timezone)を参考に設定を行いましたので手順についてまとめたいと思います。

ユーザー毎にタイムゾーンを変更する

こちらのコマンドを使用してユーザー事にタイムゾーンを変更する事ができます。

ALTER USER ユーザー名 SET timezone to タイムゾーン先を指定;

日本時間に設定したいので、JSTのタイムゾーン先を確認します。

dev=> select pg_timezone_names();
                 pg_timezone_names                  
----------------------------------------------------
 (ROK,KST,09:00:00,f)
...
(Asia/Tokyo,JST,09:00:00,f)
...

Asia/Tokyoを指定して実行する事でJST時刻に変更できそうです。

やってみる

ではuser_jpユーザーのタイムゾーンをJSTに設定してみます。

変更前のuser_jpユーザーのsysdateを確認します(2020年12月2日の10時頃に実装を開始)。

dev=> select sysdate;
         timestamp          
----------------------------
 2020-12-02 01:27:20.935676
(1 row)

現在はデフォルトのUTC時刻になっていますので、JSTに変更します。

dev=> ALTER USER user_jp SET timezone to 'Asia/Tokyo';
ALTER USER

変更が完了しました。再接続してsysdateを確認します。

dev=> select sysdate;
         timestamp          
----------------------------
 2020-12-02 10:27:46.461092
(1 row)

JST時刻になっている事が確認できました。

rootユーザーでログインしタイムゾーンを確認します。

dev=> select sysdate;
         timestamp          
----------------------------
 2020-12-02 01:28:02.511929
(1 row)

UTC時刻ですので、user_jpのタイムゾーンのみが変更できていることが確認できました!

セッション毎にタイムゾーンを変更する

では次にセッション毎にタイムゾーンを変更してみます。

set timezoneを使用してJSTに設定したuser_jpユーザーをUTC時刻にセットします。

set timezoneはUTC時刻から任意の時間に変更できるので-0:00としてUTC時刻を設定します。

dev=> set timezone to '-0:00';
SET

セット後の時間を確認します。

dev=> select sysdate;
         timestamp          
----------------------------
 2020-12-02 01:28:41.740436
(1 row)

表示時刻が変更された事がわかります。

再接続して時間を確認します。

dev=> select sysdate;
         timestamp          
----------------------------
 2020-12-02 10:29:50.266818
(1 row)

JST時刻に戻っている事が確認できました。

まとめ

Redshift利用時の用途によってタイムゾーンを変更する必要がありましたので簡単ですがまとめさせていただきました。この記事がどなたかの助けになれば幸いです。

参考リンク