On 05.08.25 20:06, Peter Eisentraut wrote:
> diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/ adt/timestamp.c
 > index 25cff56c3d0..e640b48205b 100644
 > --- a/src/backend/utils/adt/timestamp.c
 > +++ b/src/backend/utils/adt/timestamp.c
> @@ -4954,7 +4954,7 @@ timestamptz_trunc_internal(text *units, TimestampTz timestamp, pg_tz *tzp)
 >                  case DTK_SECOND:
 >                  case DTK_MILLISEC:
 >                  case DTK_MICROSEC:
 > -                    PG_RETURN_TIMESTAMPTZ(timestamp);
 > +                    return timestamp;
 >                     break;
 >
 >                 default:

This one is an actual bug.  With int64-pass-by-reference, PG_RETURN_TIMESTAMPTZ() returns a newly allocated address.  This is easily reproduced by

SELECT date_trunc( 'week', timestamp with time zone 'infinity' );

which will return a random value on 32-bit systems.  (It correctly returns 'infinity' otherwise.)

I'll see about backpatching fixes for this.

This is new in PG18, so I'm continuing the discussion in the original thread: https://www.postgresql.org/message-id/flat/CAAvxfHc4084dGzEJR0_pBZkDuqbPGc5wn7gK_M0XR_kRiCdUJQ%40mail.gmail.com


Reply via email to