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で同じ設定をして、アプリを再起動すればよいのだろう、たぶん。
そうか。timestamp型にはtimezoneありとなしがあるのか。ぐぬぬ。今回は標準SQLなtimestamp型にしてしまった。
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
うまくいきました。