gpt4 book ai didi

postgresql - 在 postgres 中,我如何创建一个自定义类型,它只是一个截断为分钟的时间戳

转载 作者:行者123 更新时间:2023-11-29 11:46:57 25 4
gpt4 key购买 nike

我在许多表中都有一个“event_datetime”列,我需要将其截断到分钟。我不想在所有地方创建触发器以在我插入或更新时截断它,或者在我比较时不得不调用 date_trunc。是否可以有一个本质上是截断时间戳的自定义类型?

最佳答案

您可以创建 new base types in a low-level language like C .您可能不想这样做。

在 PostgreSQL 中,时间戳数据类型采用 optional precision .但将其设置为零会消除小数秒,而不是秒。

我认为你能做的最好的事情就是

  • 创建一个带有检查约束的域,并且
  • 要求所有插入和更新都调用一个函数。

创建域 代码如下所示。

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 语句,

  • 撤销对基表的“插入”和“更新”权限,
  • 编写一个函数来执行截断和插入,以及
  • 调用函数而不是直接使用基表。

但这只是意味着您必须在每个插入和更新语句中调用您的 函数,而不是在每个插入和更新语句中调用date_trunc()。目前尚不清楚您是否愿意这样做。

关于postgresql - 在 postgres 中,我如何创建一个自定义类型,它只是一个截断为分钟的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45263141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com