plpgsql: Plan type mismatch error

Started by Brendan Jurdabout 18 years ago5 messages
#1Brendan Jurd
direvus@gmail.com

Hi hackers,

I recently ran afoul of the following error message:

ERROR: type of "varname" does not match that when preparing the plan

IMO the message isn't quite in English and doesn't explain the problem
very well. I'd like to change it to something more like

ERROR: the type of "varname" does not match the type expected by the planner
HINT: Ensure that the type does not change between function calls, or
use EXECUTE instead

Comments?

Regards,
BJ

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Brendan Jurd (#1)
Re: plpgsql: Plan type mismatch error

"Brendan Jurd" <direvus@gmail.com> writes:

I recently ran afoul of the following error message:
ERROR: type of "varname" does not match that when preparing the plan
IMO the message isn't quite in English and doesn't explain the problem
very well.

The English is fine. What I want to know about is whether this was a
current release, and if so how you provoked it.

regards, tom lane

#3Brendan Jurd
direvus@gmail.com
In reply to: Tom Lane (#2)
Re: plpgsql: Plan type mismatch error

On 10/16/07, Tom Lane <tgl@sss.pgh.pa.us> wrote:

"Brendan Jurd" <direvus@gmail.com> writes:

I recently ran afoul of the following error message:
ERROR: type of "varname" does not match that when preparing the plan
IMO the message isn't quite in English and doesn't explain the problem
very well.

The English is fine. What I want to know about is whether this was a
current release, and if so how you provoked it.

This was in 8.3 beta 1. I provoked the message by having a variable
which came from a dynamic query (EXECUTE .. INTO a variable of type
RECORD), and a member of that record changed type between one
execution of the function and the next.

So the plan was cached on the first execution, and in the second
execution the type of the variable did not match the type in the plan.
At least, that's what I understand happened from looking at the code
which emitted the message.

Once I knew what the message was talking about, fixing my function was
easy. It's a useful error message, it's just not well articulated ...

Cheers,
BJ

#4Pavel Stehule
pavel.stehule@gmail.com
In reply to: Brendan Jurd (#3)
Re: plpgsql: Plan type mismatch error

2007/10/16, Brendan Jurd <direvus@gmail.com>:

On 10/16/07, Tom Lane <tgl@sss.pgh.pa.us> wrote:

"Brendan Jurd" <direvus@gmail.com> writes:

I recently ran afoul of the following error message:
ERROR: type of "varname" does not match that when preparing the plan
IMO the message isn't quite in English and doesn't explain the problem
very well.

The English is fine. What I want to know about is whether this was a
current release, and if so how you provoked it.

This was in 8.3 beta 1. I provoked the message by having a variable
which came from a dynamic query (EXECUTE .. INTO a variable of type
RECORD), and a member of that record changed type between one
execution of the function and the next.

So the plan was cached on the first execution, and in the second
execution the type of the variable did not match the type in the plan.
At least, that's what I understand happened from looking at the code
which emitted the message.

Once I knew what the message was talking about, fixing my function was
easy. It's a useful error message, it's just not well articulated ...

Cheers,
BJ

please, read:
http://www.pgsql.cz/index.php/Automatic_execution_plan_caching_in_PL/pgSQL

Pavel

#5Brendan Jurd
direvus@gmail.com
In reply to: Pavel Stehule (#4)
Re: plpgsql: Plan type mismatch error

On 10/16/07, Pavel Stehule <pavel.stehule@gmail.com> wrote:

please, read:
http://www.pgsql.cz/index.php/Automatic_execution_plan_caching_in_PL/pgSQL

Thanks Pavel,

I actually came across that wiki article via Google when I was first
trying to learn more about the message. But, I'm not asking for help
understanding how plan caching works. As mentioned, I've already
fixed the problem with my function.

Rather, I'm suggesting that we increase the helpfulness of the error message.

BJ