Re: possible bug seen with -DCLOBBER_CACHE_ALWAYS and changing GUCs

From: Noah Misch <noah(at)leadboat(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Jeff Davis <pgsql(at)j-davis(dot)com>, pgsql-bugs(at)postgresql(dot)org
Subject: Re: possible bug seen with -DCLOBBER_CACHE_ALWAYS and changing GUCs
Date: 2011-12-05 06:23:52
Message-ID: 20111205062352.GC10035@tornado.leadboat.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Wed, Nov 30, 2011 at 08:10:22PM -0500, Tom Lane wrote:
> Jeff Davis <pgsql(at)j-davis(dot)com> writes:
> > SQL:
> > set datestyle to postgres,us;
> > prepare stmt as select '02-01-2011'::date::text;
> > execute stmt;
> > set datestyle to postgres,euro;
> > execute stmt;
> > deallocate stmt;
>
> > The results I get with normal debug compilation are:
>
> > SET
> > PREPARE
> > text
> > ------------
> > 02-01-2011
> > (1 row)
>
> > SET
> > text
> > ------------
> > 01-02-2011
> > (1 row)
>
> > DEALLOCATE

> > But with -DCLOBBER_CACHE_ALWAYS and -DRELCACHE_FORCE_RELEASE, I get:
>
> > SET
> > PREPARE
> > text
> > ------------
> > 02-01-2011
> > (1 row)
>
> > SET
> > text
> > ------------
> > 02-01-2011
> > (1 row)
>
> > DEALLOCATE
>
> > Which one of those results is correct?
>
> I believe what is happening in the second case is that the query is
> getting re-parse-analyzed, from scratch, and since now datestyle is
> different (DMY not MDY), the date literal gets interpreted differently.
> You could argue it either way as to which result is "more correct",
> but I doubt we're going to try to do something about that. Best advice
> is to avoid ambiguous input, or if you can't, at least avoid flipping
> your datestyle on the fly.

One could defend consistent use of either the PREPARE-time DateStyle or the
EXECUTE-time DateStyle to interpret literals. However, using the value as of
the last RevalidateCachedQuery(), its timing independent of any GUC change, is
an implementation artifact with no redeeming value for the user.

This hazard also arises around IntervalStyle, TimeZone, sql_inheritance,
transform_null_equals, and array_nulls.

Implementation challenges aside, I'd contend for always using PREPARE-time
values during parse analysis. That's more consistent with the user-visible
consequences of changing search_path or standard_conforming_strings. That
said, I don't have in mind a cure clearly less ugly than the disease.

nm

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Marcin.Kasperski 2011-12-05 12:40:10 BUG #6327: Prefix full-text-search fails for hosts with complicated names
Previous Message Tom Lane 2011-12-05 03:40:06 Re: BUG #6326: SELECT ARRAY(SELECT ...) syntax and array[] results doesn't work