BUG #6316: function search_path causes set_config() is_local = true to have no effect

Поиск
Список
Период
Сортировка
От postgresql@thewickedtribe.net
Тема BUG #6316: function search_path causes set_config() is_local = true to have no effect
Дата
Msg-id E1RWMUx-0007Gn-C9@wrigleys.postgresql.org
обсуждение исходный текст
Ответы Re: BUG #6316: function search_path causes set_config() is_local = true to have no effect  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-bugs
The following bug has been logged on the website:

Bug reference:      6316
Logged by:          Jon Erdman
Email address:      postgresql@thewickedtribe.net
PostgreSQL version: 9.1.1
Operating system:   Ubuntu
Description:=20=20=20=20=20=20=20=20


Hi Tom! :)

So, found this in 8.3 but tested and it effects everything up to 9.1.1. If
search_path on a function is set to anything, calls to set_config() with
is_local =3D true inside that function have no effect.=20

See test case and output below:

BEGIN;

CREATE OR REPLACE FUNCTION public.setting_bug_true()
    RETURNS VOID LANGUAGE plpgsql AS
$$
BEGIN
    PERFORM pg_catalog.set_config( 'search_path', 'pg_catalog&#=
39;, true );
END;
$$
SET search_path =3D public
;

CREATE OR REPLACE FUNCTION public.setting_bug_false()
    RETURNS VOID LANGUAGE plpgsql AS
$$
BEGIN
    PERFORM pg_catalog.set_config( 'search_path', 'pg_catalog&#=
39;, false );
END;
$$
SET search_path =3D public
;

SET search_path =3D public;
SHOW search_path;

SELECT public.setting_bug_true();
\echo Search path should now be pg_catalog
SHOW search_path;

SET search_path =3D public;
SHOW search_path;

SELECT public.setting_bug_false();
\echo Oddly, if is_local is false, it *does* work
SHOW search_path;

ALTER FUNCTION public.setting_bug_true() SET search_path =3D DEFAULT;

SET search_path =3D public;
SHOW search_path;

SELECT public.setting_bug_true();
\echo Take search_path off the function and it works!?! /me smells a bug...
SHOW search_path;

ROLLBACK;





And the output:

postgres@[local]/cnuapp_dev:5437=3D# \i ~/bug.sql
BEGIN
Time: 0.070 ms
CREATE FUNCTION
Time: 0.208 ms
CREATE FUNCTION
Time: 0.164 ms
SET
Time: 0.055 ms
 search_path
-------------
 public
(1 row)

Time: 0.025 ms
 setting_bug_true
------------------

(1 row)

Time: 0.138 ms
Search path should now be pg_catalog
 search_path
-------------
 public
(1 row)

Time: 0.022 ms
SET
Time: 0.019 ms
 search_path
-------------
 public
(1 row)

Time: 0.023 ms
 setting_bug_false
-------------------

(1 row)

Time: 0.085 ms
Oddly, if is_local is false, it *does* work
 search_path
-------------
 pg_catalog
(1 row)

Time: 0.021 ms
ALTER FUNCTION
Time: 0.051 ms
SET
Time: 0.014 ms
 search_path
-------------
 public
(1 row)

Time: 0.018 ms
 setting_bug_true
------------------

(1 row)

Time: 0.108 ms
Take search_path off the function and it works!?! /me smells a bug...
 search_path
-------------
 pg_catalog
(1 row)

Time: 0.018 ms
ROLLBACK
Time: 0.050 ms
postgres@[local]/cnuapp_dev:5437=3D#

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

Предыдущее
От: Bernhard Reutner-Fischer
Дата:
Сообщение: Re: BUG #6315: FETCH NEXT :next ROWS ONLY fails
Следующее
От: Tom Lane
Дата:
Сообщение: Re: BUG #6316: function search_path causes set_config() is_local = true to have no effect