我有一个包含数百万个日期/时间数据行的PostgreSQL数据库。数据的时间范围是从2004年到现在。时区始终为UTC。 由于我的虚拟主机帐户上的磁盘空间有限,我希望尽可能减少数据库大小。我知道在Microsoft SQL Server中有一个4字节大小的SMALLDATETIME数据类型。
Postgres中是否存在与SMALLDATETIME相同的内容?
(注意:我查看了Postgres手册,但所有'日期和时间'都是8个字节.4字节'date'数据类型不符合我的需要,因为我需要在几分钟内解决。)
答案 0 :(得分:2)
不,没有这样的类型。对于一些用例来说这很好,但它不受支持。
作为妥协,您可以做的是存储自偏移时期以来的秒数:
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是开源的,这意味着人们需要做的事情,如果他们希望它们发生。