Re: BUG #1277: plpgsql EXECUTE bug in beta3

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: "Tom Hebbron" <news_user(at)hebbron(dot)com>
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #1277: plpgsql EXECUTE bug in beta3
Date: 2004-10-04 17:02:33
Message-ID: 366.1096909353@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

"PostgreSQL Bugs List" <pgsql-bugs(at)postgresql(dot)org> writes:
> Under beta3, the following behaviour is observed:

> test=# create or replace function execute_sql(text) returns void AS $$begin
> execute $1; return; end; $$ language plpgsql;
> CREATE FUNCTION
> test=#
> test=# select execute_sql('create table a (i integer); insert into a(i)
> values(1);');
> ERROR: relation "a" does not exist
> CONTEXT: SQL query "create table a (i integer); insert into a(i)
> values(1);"
> PL/pgSQL function "execute_sql" line 1 at execute statement

This is happening because EXECUTE now parses and plans the whole string
in one go, so that it tries to plan the INSERT before the CREATE has
been carried out. You would see the same behavior if you tried for
instance to execute those two commands as the body of an SQL function.
I am inclined to regard this as "not a bug", and tell you to execute the
two queries in separate EXECUTE commands. I'm not sure it's worth the
substantial additional complexity in spi.c that would be needed to
preserve the old behavior --- especially when the documentation does not
suggest anywhere that you can use EXECUTE to execute more than one
command in the first place.

Anyone else have an opinion?

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Tom Hebbron 2004-10-04 18:19:43 Re: BUG #1277: plpgsql EXECUTE bug in beta3
Previous Message Tom Lane 2004-10-04 16:51:55 Re: bgwriter interfering with consistent view of system tables?