【PostgreSQL】デフォルトでミリ秒切り捨て

例えば、
テーブルのカラムにて、型がTIMESTAMPでデフォルトをCURRENT_TIMESTAMPにしている場合
サーバーサイドからinsert, update処理する際は yyyy-mm-dd hh24:mi:ss 形式に変換しているが、
手動でinsertする際にデフォルトに任せてミリ秒まで入れてしまい、形式の統一ができてないことが発生した。
形式の統一ができていないと、サーバーサイド内で処理する際にミリ秒が考慮されておらず、想定した処理をしてくれない事象が発生した。

よって、デフォルトでミリ秒切り捨てをするようにしてみた。

select文でのミリ秒切り捨て

通常

select created_at from hoge;

        created_at
----------------------------
 2019-10-15 09:10:58.563309

timestamp(0)

select created_at::timestamp(0) from hoge;

     created_at
---------------------
 2019-10-15 09:10:58

date_trunc(‘second’)

select date_trunc('second', created_at) from hoge;

     created_at
---------------------
 2019-10-15 09:10:58

デフォルトでの設定

カラム追加時

ALTER TABLE hoge ADD COLUMN created_at SET CURRENT_TIMESTAMP::timestamp(0);

既存カラムへの指定

ALTER TABLE hoge ALTER COLUMN created_at SET DEFAULT CURRENT_TIMESTAMP::timestamp(0);

有効期限などを扱うカラムで +1 hour 等にしたい場合

ALTER TABLE hoge ADD COLUMN expired_at SET DATE_TRUNC('second', CURRENT_TIMESTAMP+'1 hour');

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です