Hi Bruce,

Thanks for your reply. Yes I think it does need to be stated more boldly - from a "Poka-Yoke" perspective (and despite using Postgresql for years), I didn't properly understand it the first time.

I think it's a gotcha, because, to me, the name suggests a different behaviour. I understood "timestamp with timezone" as "a data type which stores the timestamp, and stores the timezone WITH (i.e. alongside) it".

So I think it deserves a "Caution" or "note" boxout, or at least to have words "the originally stated or assumed time zone is not retained." made in bold.


While looking at the docs, I can also see 3 other things that would be helpful to add:

1. How to actually store "timestamp_and_timezone" ? (i.e. I want to store the UTC value, and I want to store and retrieve the original offset). Presumably the answer is to store both timestamptz AND the integer tz_offset (is there a "timezone" datatype, or should that just be a string?)

2. How to store a general timestamp in NO timezone (for example, to store the concept that "Armistice Day is remembered at 11:00 on 11/11" - which is the same for everyone across the world, even though the underlying UTC value is undefined). Presumably you could store this as 2 columns (date, time), but there's no compound "date+time" type, and it would not be the same as timestamp.

3. While the docs caution against using "time with timezone", they don't recommend whether to use "timestamp" or "timestamptz" as the default. Such a recommendation might be helpful.


Best wishes,

Richard


On 2026-05-13 01:19, Bruce Momjian wrote:
On Wed, Apr 22, 2026 at 11:40:49AM +0000, PG Doc comments form wrote:
The following documentation comment has been logged on the website:

Page: https://www.postgresql.org/docs/18/datatype-datetime.html
Description:

Hi,

Just a small bit of feedback on this page:
https://www.postgresql.org/docs/current/datatype-datetime.html

There is a gotcha for the unwary, in that it does not preserve the original
timezone after the data is recorded.
The user needs to understand that timestamp with timezone is performing
implicit conversion for them, but it does not save the TZ value.

One might, naively, expect it to do the "obvious" thing, storing the
original timezone alongside the timestamp, and therefore
allow you to query the data and discover what the timezone was when the data
was input.
(i.e. the on-disk representation of "17th May at 4pm New York" should be
different from "17th May at 1pm in Los Angeles", and that a query
should be able to do something like not just the UTC value in the local timezone, but also the fact that this date was recorded from the perspective
of a New Yorker).

Or in other words,  one might expect that:
SELECT EXTRACT (timezone FROM '2026-04-16 13:00:00+09'::timestamptz);
should be able to tell me the "+09", regardless of my own local time.

May I suggest adding a "Caution" to draw greater attention to this fact, and
recommending an alternative if there is one.

The documentation says:

        
https://www.postgresql.org/docs/current/datatype-datetime.html#DATATYPE-DATETIME-INPUT

        For timestamp with time zone values, an input string that
        includes an explicit time zone will be converted to UTC
        (Universal Coordinated Time) using the appropriate offset for
        that time zone. If no time zone is stated in the input string,
        then it is assumed to be in the time zone indicated by the
        system's TimeZone parameter, and is converted to UTC using the
-->  offset for the timezone zone. In either case, the value is stored
-->  internally as UTC, and the originally stated or assumed time zone
-->  is not retained.

Does this need to be stated more boldly?


Reply via email to