>>>>> "Robert" == Robert Haas <robertmh...@gmail.com> writes:

 >> But the problem that actually came up is this: if you do the
 >> PQprepare before the named cursor has actually been opened, then
 >> everything works _up until_ the first event, such as a change to
 >> search_path, that forces a revalidation; and at that point it fails
 >> with the "must not change result type" error _even if_ the cursor
 >> always has exactly the same result type.  This happens because the
 >> initial prepare actually stored NULL for plansource->resultDesc,
 >> since the cursor name wasn't found, while on the revalidate, when
 >> the cursor obviously does exist, it gets the actual result type.
 >> 
 >> It seems a bit of a "gotcha" to have it fail in this case when the
 >> result type isn't actually being checked in other cases.

 Robert> To me, that sounds like a bug.

So what's the appropriate fix? My suggestion would be to suppress the
result type check entirely for utility statements; EXPLAIN and SHOW
always return the same thing anyway, and both FETCH and EXECUTE are
subject to the issue described. This would mean conceding that the
result descriptor of a prepared FETCH or EXECUTE might change (i.e. a
Describe of the statement might not be useful, though a Describe of an
opened portal would be ok). I think this would result in the most
obviously correct behavior from the client point of view.

-- 
Andrew (irc:RhodiumToad)


-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to