Re: Plan invalidation vs. unnamed prepared statements

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: Gregory Stark <stark(at)enterprisedb(dot)com>
Cc: pgsql-hackers(at)postgreSQL(dot)org, pgsql-jdbc(at)postgreSQL(dot)org
Subject: Re: Plan invalidation vs. unnamed prepared statements
Date: 2007-03-06 18:14:42
Message-ID: 6706.1173204882@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-jdbc

Gregory Stark <stark(at)enterprisedb(dot)com> writes:
> Can we forcibly discard it if *any* messages are received that might
> invalidate a plan? So basically it would work fine unless anyone in the system
> does any DDL at all? I guess that has the downside of introducing random
> unpredictable failures.

Ugh :-(

> Or stash the query string and replan it (possibly in the query cache this
> time) if someone executes it a second time?

I think that's either my plan A or C.

The main problem with uncontrolled replanning is that there's no way to
detect a change in the query properties. For example suppose the query
is "SELECT * FROM foo" and we've already told the client (via Describe
Statement) that that returns two integer columns. If an inval now
arrives because of "ALTER TABLE foo ADD COLUMN" (or perhaps worse, ALTER
COLUMN TYPE), we've got a problem. If we just blindly replan then we'll
return tuples that do not match the previously given row description,
which will certainly break most clients.

The plan caching module has enough infrastructure to detect and complain
about these sorts of situations, and it also knows how to manage lock
acquisition so that once we've decided a plan is still good, the tables
won't change underneath us while we use the plan. I don't see any way
to make comparable guarantees without the overhead that goes with the
cache manager.

regards, tom lane

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Florian G. Pflug 2007-03-06 18:27:03 Re: Auto creation of Partitions
Previous Message Jeff Davis 2007-03-06 18:09:42 Re: Bug: Buffer cache is not scan resistant

Browse pgsql-jdbc by date

  From Date Subject
Next Message Dave Cramer 2007-03-06 18:45:10 Re: [JDBC] Plan invalidation vs. unnamed prepared statements
Previous Message Gregory Stark 2007-03-06 18:04:16 Re: Plan invalidation vs. unnamed prepared statements