PostgreSQL:更小的类型?

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

PostgreSQL中的Timestamptz时间为8字节。有没有办法获得一个6字节的时间戳来降低精度?

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级存储时,这似乎毫无意义

  • 如果不仔细地排列表列,您将丢失您认为已获得的字节

  • 使用数字而不是适当的
    时间戳
    数据类型将使查询更加复杂,结果难以解释,并且会阻止您使用


由于所有这些原因,我将把这个想法坚定地放在有害的微优化领域。

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实际问题是优化大桌子的大小。如果需要的话,我会在稍后单独提出一个问题,但我认为这本身就是一个好问题。