我有一个包含数百万行日期/时间数据的 PostgreSQL 数据库。数据时间范围为2004年至今。时区始终为 UTC。 由于我的虚拟主机帐户上的磁盘空间有限,我想尽可能地减小数据库大小。我知道在 Microsoft SQL Server 中有一个 4 字节大小的 SMALLDATETIME 数据类型。
在 Postgres 中是否有等同于 SMALLDATETIME 的东西?
(注意:我看过 Postgres 手册,但所有“日期和时间”都是 8 个字节。4 字节的“日期”数据类型不适合我的需要,因为我需要在几分钟内解决。)
最佳答案
不,没有这样的类型。这对于一些用例来说会很好,但它不受支持。
作为妥协,您可以做的是存储自偏移纪元以来的秒数:
extract(epoch from mydate) - extract(epoch from TIMESTAMP '2004-01-01 00:00:00')
在 integer
列中,然后即时重建日期。这会影响性能,更重要的是,会降低可读性,但它会起作用。
SELECT to_timestamp(mydatesecondssince2004 + extract(epoch from TIMESTAMP '2004-01-01 00:00:00')) FROM mytable
或者,您可能是决定添加“smalldate”和“smalltimestamp”类型的人; PostgreSQL 是开源的,这意味着人们需要做他们希望发生的事情。
关于postgresql - PostgreSQL 中的小日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21453184/