我在许多表中都有一个“event_datetime”列,我需要将其截断为分钟。我不想在所有地方创建触发器,以便在插入或更新时截断它,或者在比较时不得不调用date_trunc。是否可以拥有一个基本上是时间戳截断的自定义类型?
答案 0 :(得分:2)
您可以创建new base types in a low-level language like C。你可能不想这样做。
在PostgreSQL中,时间戳数据类型需要optional precision。但是将其设置为零可以消除小数秒,而不是秒。
我认为你能做的最好就是
create domain
代码如下所示。
create domain ts as timestamp
constraint no_seconds check (VALUE = date_trunc('minute', VALUE));
create table ts_test (
test_ts ts primary key
);
-- Doesn't work . . .
insert into ts_test values (current_timestamp);
ERROR: value for domain ts violates check constraint "no_seconds"
-- But this does.
insert into ts_test values (date_trunc('minute', current_timestamp));
这也允许在不调用date_trunc()
的情况下进行比较。
避免将date_trunc()
写入每个INSERT和UPDATE语句,
但这只是意味着您必须在每个insert和update语句中调用您的函数,而不是在每个insert和update语句中调用date_trunc()
。目前尚不清楚你是否愿意这样做。