Re: BUG #14275: cursor's variable in pgsql doesn't respect scope

Поиск
Список
Период
Сортировка
От Pavel Stehule
Тема Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
Дата
Msg-id CAFj8pRCrR881mRgSVQErDQQQHNUFWx0Wr7ELGNOdtCnf6ODN9g@mail.gmail.com
обсуждение исходный текст
Ответ на BUG #14275: cursor's variable in pgsql doesn't respect scope  (klimych@tut.by)
Ответы Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
Список 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 по дате отправления:

Предыдущее
От: Andrew Gierth
Дата:
Сообщение: Re: BUG #14275: cursor's variable in pgsql doesn't respect scope
Следующее
От: petr.mrazek@xura.com
Дата:
Сообщение: BUG #14276: Slony package has bad path to PID file folder in starts script