public inbox for [email protected]  
help / color / mirror / Atom feed
From: Daniel Heath <[email protected]>
To: Tom Lane <[email protected]>
Cc: [email protected]
Subject: Re: Prepared statement invalidation
Date: Fri, 16 Apr 2021 16:16:45 +1000
Message-ID: <[email protected]> (raw)
In-Reply-To: <[email protected]>
References: <[email protected]>
	<[email protected]>

Is there a transaction isolation mode that would help with the specific case of adding a column to a table? EG to prevent a prepared statement from seeing the new schema?

Thanks,
Daniel Heath

On Fri, Apr 16, 2021, at 10:17 AM, Tom Lane wrote:
> "Daniel Heath" <[email protected]> writes:
> > I've found that when I add a new column, I sometimes get a spike of errors on the application side due to prepared statement query plans getting invalidated, causing transactions to rollback.
> > The error is:
> > ERROR: cached plan must not change result type 
> > Is there a way to make postgres recalculate the query plan instead of failing the transaction when a new column is added?
> 
> No.  It'd be easy enough to remove that restriction on the server side,
> but we're afraid that it would break applications, which probably aren't
> expecting the result rowtype of a prepared query to be different from what
> they were told (perhaps only milliseconds earlier).
> 
> I'd say the short answer is "don't use prepared queries, or if you do,
> spell out the columns you want instead of saying SELECT *".
> 
> 			regards, tom lane
> 
> 
> 
> 
> > Thanks,
> > Daniel Heath
> 
> 





view thread (3+ messages)

reply

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Reply to all the recipients using the --to and --cc options:
  reply via email

  To: [email protected]
  Cc: [email protected], [email protected], [email protected]
  Subject: Re: Prepared statement invalidation
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox