Обсуждение: BUG #15101: function set search_path = '' breaks dump/restore

Поиск
Список
Период
Сортировка

BUG #15101: function set search_path = '' breaks dump/restore

От
PG Bug reporting form
Дата:
The following bug has been logged on the website:

Bug reference:      15101
Logged by:          Andrew Gierth
Email address:      andrew@tao11.riddles.org.uk
PostgreSQL version: 10.3
Operating system:   any
Description:

Given:

create or replace function foo()
 returns text language sql
 as $$
  select current_schemas(true)::text;
 $$
 set search_path = '';

dump/restore (or \ef) fails with:

ERROR:  zero-length delimited identifier at or near """"

The problem obviously being that pg_get_functiondef is returning invalid
syntax for the search_path setting.


Re: BUG #15101: function set search_path = '' breaks dump/restore

От
Michael Paquier
Дата:
On Thu, Mar 08, 2018 at 06:59:21AM +0000, PG Bug reporting form wrote:
> create or replace function foo()
>  returns text language sql
>  as $$
>   select current_schemas(true)::text;
>  $$
>  set search_path = '';
>
> dump/restore (or \ef) fails with:
>
> ERROR:  zero-length delimited identifier at or near """"
>
> The problem obviously being that pg_get_functiondef is returning invalid
> syntax for the search_path setting.

In this context pg_get_functiondef assigns quote as it sees that
search_path is of type GUC_LIST, which needs special handling.  Likely
this needs more thoughts for empty values.
--
Michael

Вложения

Re: BUG #15101: function set search_path = '' breaks dump/restore

От
Andrew Gierth
Дата:
>>>>> "PG" == PG Bug reporting form <noreply@postgresql.org> writes:

 PG> Given:

 PG> create or replace function foo()
 PG>  returns text language sql
 PG>  as $$
 PG>   select current_schemas(true)::text;
 PG>  $$
 PG>  set search_path = '';

For the record, the workaround I suggested to the user on IRC who ran
into this issue was:

alter function foo() set search_path = pg_catalog;

which has (as far as I can tell) exactly the same runtime effect as
setting it to '' but doesn't break dump/restore.

-- 
Andrew (irc:RhodiumToad)