Re: BUG #14275: cursor's variable in pgsql doesn't respect scope - Mailing list pgsql-bugs

From Pavel Stehule
Subject Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
Date
Msg-id CAFj8pRCrR881mRgSVQErDQQQHNUFWx0Wr7ELGNOdtCnf6ODN9g@mail.gmail.com
Whole thread Raw
In response to BUG #14275: cursor's variable in pgsql doesn't respect scope  (klimych@tut.by)
Responses Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
List pgsql-bugs
2016-08-03 11:53 GMT+02:00 <klimych@tut.by>:

> The following bug has been logged on the website:
>
> Bug reference:      14275
> Logged by:          Oleg Klimovich
> Email address:      klimych@tut.by
> PostgreSQL version: 9.5.3
> Operating system:   Windows 7, Windows 8, Ubuntu 14.04
> Description:
>
> DO $$
> DECLARE
>  cur cursor for select 1; -- (1)
> BEGIN
>   open cur; -- (2)
>
>   DECLARE
>     cur cursor for select 2; -- (3)
>   BEGIN
>     open cur; -- (4)
>     close cur; -- (5)
>   END;
>
>   close cur; -- (6)
> end $$;
>
> Executing of the code gives error "cursor "cur" already in use". Evedently,
> PG in statement (4) refers to the variable, defined in statement (1). (and
> I
> expect it should be variable, defined in statement (3)).
> Futhermore, same error exists even across different functions:
>
> create function func1() returns void as $$
> declare
>   cur cursor for select 1;
> BEGIN
>   open cur;
>   close cur;
> end
> $$
>  LANGUAGE 'plpgsql';
>
> create function func2() returns void as $$
> declare
>   cur cursor for select 1;
> BEGIN
>   open cur;
>
>   PERFORM func1();
>
>   close cur;
> end
> $$
>  LANGUAGE 'plpgsql';
>
> select func2();
>
> So, cursor's variable is kind of global. I just hope it's a bug and not
> "feature" (at least I haven't found mention of such behaviour in
> documentation)
>

It is feature - PLpgSQL engine uses named cursor accessed via SPI API. The
name of SPI cursor is generated by cursor variable name. SPI API has zero
relation to plpgsql block structure.

See source code pl_exec.c exec_stmt_open

Regards

Pavel


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

pgsql-bugs by date:

Previous
From: Andrew Gierth
Date:
Subject: Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
Next
From: petr.mrazek@xura.com
Date:
Subject: BUG #14276: Slony package has bad path to PID file folder in starts script