Re: pl/pgsql problem with search_path

Поиск
Список
Период
Сортировка
От Bruce Momjian
Тема Re: pl/pgsql problem with search_path
Дата
Msg-id 200309062321.h86NLBA20427@candle.pha.pa.us
обсуждение исходный текст
Ответ на pl/pgsql problem with search_path  (Eugene Chow <gene@paragonam.com>)
Ответы Re: pl/pgsql problem with search_path  (Tom Lane <tgl@sss.pgh.pa.us>)
Re: pl/pgsql problem with search_path  (Eugene Chow <gene@paragonam.com>)
Список pgsql-bugs
I think the problem is that the first time the function is called, it is
compiled and cached for later use.  At that time the function is bound
to the table oid, so even though you change the search path, the cached
copy still calls the old table.

If you exit psql and re-enter, or change the schema _before_ you call
the function for the first time, it should be fine.

This highlights another problem with our plpgsql function caching.

---------------------------------------------------------------------------

Eugene Chow wrote:
> My plpgsql function seems to be ignoring search_path when looking for
> the right table to select from. I'm running 7.3.4. Below is my test
> code. Am I doing something wrong?
>
> TIA, Gene Chow
>
> test=> create or replace function getval() returns varchar as '
> test'> declare val varchar;
> test'> begin
> test'>     select into val value from bar limit 1;
> test'>     return val;
> test'> end;' language 'plpgsql';
> CREATE FUNCTION
>
> test=> create table public.bar ( value varchar );
> CREATE TABLE
>
> test=> insert into public.bar values ('public value');
> INSERT 4012748 1
>
> test=> create schema foo;
> CREATE SCHEMA
>
> test=> create table foo.bar ( value varchar );
> CREATE TABLE
>
> test=> insert into foo.bar values ('foo value');
> INSERT 4012754 1
>
> test=> set search_path to foo, public;
> SET
>
> test=> select *, getval() from bar;
>     value   |  getval
> -----------+-----------
>   foo value | foo value
> (1 row)
>
> test=> set search_path to public;
> SET
>
> test=> select *, getval() from bar;
>      value     |  getval
> --------------+-----------
>   public value | foo value
> (1 row)
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 7: don't forget to increase your free space map settings
>

--
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073

В списке pgsql-bugs по дате отправления:

Предыдущее
От: terry@greatgulfhomes.com
Дата:
Сообщение: Re: Unclear documentation (IMMUTABLE functions)
Следующее
От: Tom Lane
Дата:
Сообщение: Re: pl/pgsql problem with search_path