Hi,
On 2019-06-11 10:49:28 -0400, Tom Lane wrote:
> It doesn't reliably work to do so, and we have a project policy against
> trying, and this code should never have been committed in this state.
I'll also note that I complained about this specific instance being
introduced all the way back in 2013 and then again 2016:
https://www.postgresql.org/message-id/20131118172748.GG20305%40awork2.anarazel.de
On 2013-11-18 18:27:48 +0100, Andres Freund wrote:
> * Why the PG_TRY/PG_CATCH in check_recovery_target_time? Besides being
> really strangely formatted (multiline :? inside a function?) it
> doesn't a) seem to be correct to ignore potential memory allocation
> errors by just switching back into the context that just errored out,
> and continue to work there b) forgo cleanup by just continuing as if
> nothing happened. That's unlikely to be acceptable.
> * You access recovery_target_name[0] unconditionally, although it's
https://www.postgresql.org/message-id/20140123133424.GD29782%40awork2.anarazel.de
On 2016-11-12 08:09:49 -0800, Andres Freund wrote:
> > +static bool
> > +check_recovery_target_time(char **newval, void **extra, GucSource source)
> > +{
> > + TimestampTz time;
> > + TimestampTz *myextra;
> > + MemoryContext oldcontext = CurrentMemoryContext;
> > +
> > + PG_TRY();
> > + {
> > + time = (strcmp(*newval, "") == 0) ?
> > + 0 :
> > + DatumGetTimestampTz(DirectFunctionCall3(timestamptz_in,
> > + CStringGetDatum(*newval),
> > + ObjectIdGetDatum(InvalidOid),
> > + Int32GetDatum(-1)));
> > + }
> > + PG_CATCH();
> > + {
> > + ErrorData *edata;
> > +
> > + /* Save error info */
> > + MemoryContextSwitchTo(oldcontext);
> > + edata = CopyErrorData();
> > + FlushErrorState();
> > +
> > + /* Pass the error message */
> > + GUC_check_errdetail("%s", edata->message);
> > + FreeErrorData(edata);
> > + return false;
> > + }
> > + PG_END_TRY();
>
> Hm, I'm not happy to do that kind of thing. What if there's ever any
> database interaction added to timestamptz_in?
>
> It's also problematic because the parsing of timestamps depends on the
> timezone GUC - which might not yet have taken effect...
I don't have particularly polite words about this.
Greetings,
Andres Freund