PostgreSQL:更小的类型?
PostgreSQL中的Timestamptz时间为8字节。有没有办法获得一个6字节的时间戳来降低精度?6字节几乎是不可能的,因为没有这样大小的数据类型 通过一些变形,您可以使用4字节的PostgreSQL:更小的类型?,postgresql,types,size,Postgresql,Types,Size,PostgreSQL中的Timestamptz时间为8字节。有没有办法获得一个6字节的时间戳来降低精度?6字节几乎是不可能的,因为没有这样大小的数据类型 通过一些变形,您可以使用4字节的real值: CREATE CAST (timestamp AS bigint) WITHOUT FUNCTION; SELECT (localtimestamp::bigint / 1000000 - 662774400)::real; float4 -------------- 2.69
real
值:
CREATE CAST (timestamp AS bigint) WITHOUT FUNCTION;
SELECT (localtimestamp::bigint / 1000000 - 662774400)::real;
float4
--------------
2.695969e+06
(1 row)
这将为您提供自2021-01-01 00:00:00以来的时间,精度约为1秒(但当然,对于距离该点较远的日期,精度将降低)
但整个过程几乎毫无意义。尝试以这种方式保存2或4个字节不是一个好主意:
- 节省的空间将是最小的;如今,当您可以轻松获得TB级存储时,这似乎毫无意义
- 如果不仔细地排列表列,您将丢失您认为已获得的字节
- 使用数字而不是适当的
数据类型将使查询更加复杂,结果难以解释,并且会阻止您使用时间戳
由于所有这些原因,我将把这个想法坚定地放在有害的微优化领域。6字节几乎是不可能的,因为没有这样大小的数据类型 通过一些变形,您可以使用4字节的
real
值:
CREATE CAST (timestamp AS bigint) WITHOUT FUNCTION;
SELECT (localtimestamp::bigint / 1000000 - 662774400)::real;
float4
--------------
2.695969e+06
(1 row)
这将为您提供自2021-01-01 00:00:00以来的时间,精度约为1秒(但当然,对于距离该点较远的日期,精度将降低)
但整个过程几乎毫无意义。尝试以这种方式保存2或4个字节不是一个好主意:
- 节省的空间将是最小的;如今,当您可以轻松获得TB级存储时,这似乎毫无意义
- 如果不仔细地排列表列,您将丢失您认为已获得的字节
- 使用数字而不是适当的
数据类型将使查询更加复杂,结果难以解释,并且会阻止您使用时间戳
出于所有这些原因,我将把这个想法坚定地放在有害的微优化领域。不,没有。你为什么要这样做?您试图解决的实际问题是什么?@stickybit实际问题是优化大桌子的大小。如果需要的话,我会在稍后单独提问,但我认为这本身就是一个好问题。不,没有。你为什么要问这个?您试图解决的实际问题是什么?@stickybit实际问题是优化大桌子的大小。如果需要的话,我会在稍后单独提出一个问题,但我认为这本身就是一个好问题。