什么时候应该创建没有时区的PostgreSQL时间戳?

时间:2013-08-18 23:36:10

标签: postgresql

我有一个应用程序,其目标是在GMT格式的数据库中设置所有时间戳,如果没有像update_ts timestamp without time zone那样的时区创建那些时间戳,或者这样做是否更安全/更好或者是创建没有时区的时间戳的坏主意。

1 个答案:

答案 0 :(得分:9)

  

我有一个应用程序,其目标是以GMT格式在数据库中包含所有时间戳

在这种情况下,timestamp with time zonetimestamptz)正是您想要的,尽管在SQL中对时间戳类型进行了坦率的愚蠢命名。

“带时区的时间戳”实际上是“以utc存储并在输入/输出上转换的时间戳”。

“没有时区的时间戳”是“没有时区转换的时间戳存储和检索”。

如果您将“有/无时区”视为“有/无时区转换”,则类型会更有意义。

尽管他们有名字,但两种类型都没有实际存储时区。没有SQL类型的“带时区的时间戳”实际应该是什么,这是本地时间存储时带有tz偏移和时区的明确指示。(一个简单的由于DST转换的模糊性,UTC偏移不够好。

如果要以UTC格式执行所有操作,请使用timestamptz并将服务器TimeZone设置为UTC。那样的应用程序想要进行本地时间转换,仍然可以通过设置TimeZone来获取它。