inserted_at
我的 postgres(v15.3) db 中有一个名为TIMESTAMPTZ
. 插入时该值将始终以 UTC 形式传递
我想检索这些记录的所有记录,自上次记录以来已经过去了 30 天inserted_at
。我可以将当前日期和时间(以 UTC 为单位)与inserted_at
值进行比较。
我怎样才能做到这一点?
inserted_at
我的 postgres(v15.3) db 中有一个名为TIMESTAMPTZ
. 插入时该值将始终以 UTC 形式传递
我想检索这些记录的所有记录,自上次记录以来已经过去了 30 天inserted_at
。我可以将当前日期和时间(以 UTC 为单位)与inserted_at
值进行比较。
我怎样才能做到这一点?
为了方便对列进行索引扫描,请使用
任务描述是这里最大的谜团:
假设您想要时间戳早于 30 天的所有行,那么只需:
类型
timestamptz
( =timestamp with time zone
) 存储唯一的时间点。无需翻译为当地时间。只需与当前时间戳(同时输入timestamptz
!)减去 30 天进行比较。看:确保表达式是“可控制的”。意思是,不要将表列包装在会禁用索引支持的表达式中。在这种情况下:从常量输入中减去 30 天,而不向列值添加 30 天。
需要明确的是,此信息与 type 完全无关
timestamptz
:对于
timestamptz
,任何输入都在内部“标准化”为 UTC,输入格式或附加时区偏移量根本不存储。timestamptz
通常是最佳选择。再次假设您没有混淆timestamptz
和timestamp
,并且您没有搞乱数据输入。