PostgreSQLのtimezoneを設定したいメモ
HerokuのPgが標準時モードであることに気づいたので設定することにした。 とりあえずローカルなPgで実験。
まず、現在のtimezoneを確認
% psql hoge psql (14.10 (Homebrew), server 14.2) Type "help" for help. hoge=# show timezone; TimeZone ---------- Etc/UTC (1 row) hoge=# select current_timestamp; current_timestamp ------------------------------- 2024-01-23 12:23:35.162853+00 (1 row)
UTCで+00だ。これを変更して、一度クライアントを終了する。
hoge=# alter database hoge set timezone to 'Asia/Tokyo'; ALTER DATABASE hoge=# \q
psqlを再び起動して確認する。
% psql hoge psql (14.10 (Homebrew), server 14.2) Type "help" for help. hoge =# select current_timestamp; current_timestamp ------------------------------- 2024-01-23 21:28:09.199852+09 (1 row)
うまくできた。
あとでHerokuでもやっておかなくちゃ。heroku psqlで同じ設定をして、アプリを再起動すればよいのだろう、たぶん。
PostgreSQLの時刻型
そうか。timestamp型にはtimezoneありとなしがあるのか。ぐぬぬ。今回は標準SQLなtimestamp型にしてしまった。
型 | |
---|---|
timestamp | 日付と時刻、タイムゾーンなし |
timestamp with time zone | 日付と時刻、タイムゾーンあり |
time | 時刻、タイムゾーンなし |
time with time zone | 時刻、タイムゾーンあり |
with timezoneじゃなくてwith time zone(スペースあり)なんだな。
追記:Herokuで操作したぞ
% heroku psql ... hoge::DATABASE=> select current_database(); current_database ------------------ hogehoge (1 row) hoge::DATABASE=> select current_timestamp; current_timestamp ------------------------------- 2024-01-26 09:41:32.008282+00 (1 row) hoge::DATABASE=> show timezone; TimeZone ---------- Etc/UTC (1 row) hoge::DATABASE=> alter database hogehoge set timezone to 'Asia/Tokyo'; ALTER DATABASE hoge::DATABASE=> \q
一度切断してから再接続して確認する
hoge::DATABASE=> show timezone; TimeZone ------------ Asia/Tokyo (1 row) hoge::DATABASE=> select current_timestamp; current_timestamp ------------------------------- 2024-01-26 18:42:39.714086+09 (1 row)
あれれ?うまくいかない...あ!アプリの再起動が必要だった。
% heroku restart
うまくいきました。