【发布时间】:2013-01-14 22:24:50
【问题描述】:
我们正在讨论在 postgres 中存储时间戳的最佳方式。目前,所有时间戳都存储为 +00,并且我们有一个与每个客户端关联的时区。我们查找时区并转换发生某事的时间,这会增加复杂性,因为我们需要进行更多的连接和更复杂的查询。
另一种方法是连接到 Postgres 并设置连接的时区,它会一直更改为该时区。
我的问题是在 ANZ 有 4-5 个时区。当我们尝试开具发票时,我们需要知道某些交易发生在哪一天,并且跨三个时区没有完美的解决方案。
我正在考虑在时间戳中包含时区以使其更容易 - TIMESTAMP '1999-01-15 8:00:00 -8:00'
我的印象是这是最佳做法,但有人说这是个坏主意。我们将在 ANZ 有客户,我们需要为其制作准确的发票,什么是最好的解决方案和最优雅的解决方案?
干杯 斯科特
【问题讨论】:
-
PostgreSQL docs: "我们不建议使用带时区的时间类型(尽管 PostgreSQL 支持旧应用程序并符合 SQL 标准)。"
-
time with timezone不推荐,因为它不使用日期来限定保存它的时间段。没有这个,夏令时和其他因素就无法计算 - 因此它为什么不是推荐的。然而timestamp with timezone是一种不同的数据类型,由于日期的存在,它可以保存其相对于 UTC 的所有条目,并根据用户的偏好调整时差。确保您的服务器时间是正确的,并且所有条目都设置为正确的标准,并且您的时间也是正确的。 -
如果您需要存储时区,您需要添加一列来保存它。 timestamptz 不存储时区信息。
-
ANZ是什么/在哪里?也许Australia/New Zealand?
标签: database postgresql timezone timestamp