PostgreSQLでタイムゾーンを考慮して日付操作を行う

PostgreSQLdate_trunc関数を利用して日付時刻の切り捨てを行ったあと、指定のタイムゾーンに準拠した時刻で取得したい。
このような場合は、date_trunc関数の第3引数にタイムゾーンを指定すれば良い。

-- 結果を東京のタイムゾーンとして取得
select date_trunc('day', now(), 'Asia/Tokyo');

以下のような記述では実現できないので注意。

-- うまくいかないパターン
select date_trunc('day', now() at time zone 'Asia/Tokyo');
select date_trunc('day', now()) at time zone 'Asia/Tokyo';
select date_trunc('day', now() at time zone '+9:00');
select date_trunc('day', now()) at time zone '+9:00';

参考(https://qiita.com/camp07/items/12ecc353d3b8acce6733)