pgsql: Make timetz_zone() stable, and correct a bug for DYNTZ abbreviat

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Make timetz_zone() stable, and correct a bug for DYNTZ abbreviat
Date: 2021-09-06 15:04:07
Message-ID: E1mNGAJ-0002aB-Dd@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Make timetz_zone() stable, and correct a bug for DYNTZ abbreviations.

Historically, timetz_zone() has used time(NULL) as the reference point
for deciding whether DST is active. That means its result can change
intra-statement, requiring it to be marked VOLATILE (cf. 35979e6c3).
But that definition is pretty inconsistent with the way we deal with
timestamps elsewhere. Let's make it use the transaction start time
("now()") as the reference point instead. That lets it be marked
STABLE, and also saves a kernel call per invocation.

While at it, remove the function's use of pg_time_t and pg_localtime.
Those are inconsistent with the other code in this area, which indeed
created a bug: timetz_zone() delivered completely wrong answers if
the zone was specified by a dynamic TZ abbreviation. (We need to do
something about that in the back branches, but the fix will look
different from this.)

Aleksander Alekseev and Tom Lane

Discussion: https://postgr.es/m/CAJ7c6TOMG8zSNEZtCn5SPe+cCk3Lfxb71ZaQwT2F4T7PJ_t=KA@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/388e71af880d579212c2489686903c2cfdea9032

Modified Files
--------------
src/backend/utils/adt/date.c | 28 ++++++++++++++--------------
src/include/catalog/catversion.h | 2 +-
src/include/catalog/pg_proc.dat | 2 +-
3 files changed, 16 insertions(+), 16 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2021-09-06 15:30:15 pgsql: Fix bogus timetz_zone() results for DYNTZ abbreviations.
Previous Message Amit Langote 2021-09-06 08:50:27 Re: pgsql: Fix segfault during EvalPlanQual with mix of local and foreign p