在我的 postgres 数据库中,我有一个表,我将其称为 users,其中包含 timestamptz 类型列 updated_time。当我在此字段上执行 select 语句时,我会得到类似这样的信息 - '2024-07-01 12:30:30.821 -0500'。但是,如果我转身并使用此值从该表中进行选择,例如
select * from users where updated_time = '2024-07-01 12:30:30.821 -0500'
我没有得到任何结果。这是由于隐藏的精度造成的。如果我使用它,我可以尝试/错误毫秒来构造一个具有 6 位小数的毫秒精度的查询,这将返回如下结果:
select * from users where updated_time = '2024-07-01 12:30:30.821898 -0500'
我的问题是,有谁知道为什么会发生这种情况?表列似乎有 6 毫秒的精度,select 语句没有反映出来。
附加说明:我确实尝试运行查询
select * '2024-07-01 12:30:30.821898 -0500'::timestamptz
这给了我毫秒截断值:'2024-07-01 12:30:30.821 -0500'
然后我尝试了
select '2024-07-01 12:30:30.821898 -0500'::timestamptz(6);
这仍然给我截断的值:'2024-07-01 12:30:30.821 -0500 -0500'
似乎无论我做什么,在选择时我都会坚持 3 毫秒小数位的精度。
任何帮助将不胜感激。谢谢!
timestamptz
(以及 postgres 中的所有时间)的分辨率为 1 微秒 或 0.000001 秒。
您用来显示 Postgres 查询结果的工具会截断时间戳值,从而导致混乱。
例如,您可能会看到
2024-07-01 12:30:30.821 -0500
,但实际值是 2024-07-01 12:30:30.821898 -0500
。 2024-07-01 12:30:30.821 -0500
不会匹配 2024-07-01 12:30:30.821898 -0500
。
配置您的工具,使其不再截断,或尝试使用更简单的工具,例如官方
psql
客户端。一般来说,使用 psql
来调试 PostgreSQL 问题;它会告诉您这是 PostgreSQL 问题还是介于两者之间的问题。
示范.