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

ams*_*ams 0 postgresql

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

Cra*_*ger 9

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

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

"带时区的时间戳"实际上是"在utc中存储并在输入/输出上转换的时间戳".

"没有时区的时间戳"是"没有时区转换的时间戳存储和检索".

如果您将"有/无时区"视为"有/无时区转换 ",则这些类型更有意义.

尽管他们的名字,这两种类型实际上都没有存储时区.什么"带时区的时间戳"实际上应该没有SQL类型,这是存储的本地时间,其中包含时间所在的tz偏移和时区的明确指示.(简单的UTC偏移不够好由于DST转换的模糊性).

如果要以UTC格式执行所有操作,请使用timestamptz并将服务器设置TimeZone为UTC.应用这种办法,做到想当地时间转换仍然可以通过设置得到它TimeZone.