我一直在阅读有关时间戳的 Postgres 文档,但我仍然有点困惑。
我需要存储当前时间和 UTC 1970 年 1 月 1 日午夜之间的时间,以毫秒为单位(就像在Java中定义的那些,但我没有使用 Java)。
如果我正确阅读了文档,我相信我必须使用CURRENT_TIMESTAMP
,因为它包含时区。正确的?
有人可以解释如何创建一个存储过程,将这个时间戳转换为我想要的毫秒数(以及反向函数)吗?
动机:我知道在选择行时可以使用类似EXTRACT
on 的东西,但是这种转换会比以毫秒为单位存储时间更昂贵。CURRENT_TIMESTAMP
我准备将我的时刻存储到一个bigint
. 比较时刻或计算时间差会更快。
您不需要
extract
为了获取数据:将愉快地使用索引
moment_in_time
并且将非常有效 - 实际上与性能相比不会有任何差异现在看看这两个语句并告诉我你立即明白查询将返回什么。
如果您的应用程序确实需要这些毫秒,那么您可以随时执行以下操作:
再一次,我几乎 100% 确定您不会看到任何性能差异:
另外:如果您确实存储了毫秒并且想要显示实际日期,则始终需要应用额外的转换:
对比
第二个比第一个慢,但是打字更多,使代码更难阅读。
编辑:
您不需要编写自己的函数:
extract(epoch from current_timestamp) * 1000 + extract(milliseconds from current_timestamp)
to_timestamp(1187980443530 / 1000)
所以总结一下:
用一个
timestamp
专栏去,不用担心性能。