BUG #1956: Plpgsql top-level DECLARE does not share scope with CREATE FUNCTION

From: "Karl O(dot) Pinc" <kop(at)meme(dot)com>
To: pgsql-bugs(at)postgresql(dot)org
Subject: BUG #1956: Plpgsql top-level DECLARE does not share scope with CREATE FUNCTION
Date: 2005-10-11 16:19:09
Message-ID: 20051011161909.98E4EF11B0@svr2.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


The following bug has been logged online:

Bug reference: 1956
Logged by: Karl O. Pinc
Email address: kop(at)meme(dot)com
PostgreSQL version: 8.0.3
Operating system: Linux
Description: Plpgsql top-level DECLARE does not share scope with
CREATE FUNCTION
Details:

Depending on how you want to look at it, this is not really a bug. It does
produce odd results though.

The ALIASes for function parameters that get created as part of the plpgsql
CREATE FUNCTION do not share scope (namespace?) with the top-level DECLARE
of the function. As a result, you inadvertently make your function
arguments 'disappear' by "re-declaring" them in the top-level DECLARE. I
haven't put any deep thought into this, but offhand this 'feature' seems to
have no utility but does have the ability to cause problems. Hence, this
report.

It would be nice if somebody who has deep thoughts on this would think
them.

I would expect the below to produce an error when creating foo(int). The
error would complain about trying to declare the same thing with two
different types. Instead we see the result below.

create function foo (arg int)
returns int
language plpgsql
as $$
declare
arg text;
begin
return bar(arg);
end;
$$;

create function bar (arg int)
returns int
language plpgsql
as $$
begin
return arg + 1;
end;
$$;

babase=# select foo(1);
ERROR: function bar(text) does not exist
HINT: No function matches the given name and argument types. You may need
to add explicit type casts.
CONTEXT: SQL statement "SELECT bar( $1 )"
PL/pgSQL function "foo" line 4 at return

Regards,
Karl O. Pinc

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Richard Huxton 2005-10-11 17:03:05 Re: BUG #1954: Bug in to_date('09-10-2005', 'dd-mm-yyyy')
Previous Message Magnus Hagander 2005-10-11 16:05:37 Re: BUG #1951: Multiple instances of postgres.exe running