Re: grant execute on many functions

Поиск
Список
Период
Сортировка
От Joe Conway
Тема Re: grant execute on many functions
Дата
Msg-id 40E24C15.4040901@joeconway.com
обсуждение исходный текст
Ответ на Re: grant execute on many functions  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-admin
Tom Lane wrote:
> Joe Conway <mail@joeconway.com> writes:
>
>>   select 'GRANT EXECUTE ON ' || 1142::regprocedure;
>>   ERROR:  array value must start with "{" or dimension information
>
>
> BTW, it seems like there's something pretty broken here.  How did
> arrays get into it?  A quick probe suggests that it is resolving
> the above input as array_append for type regprocedure[], which would
> qualify as a surprising choice in my book.  7.3 gives a more reasonable
> "unable to identify an operator ||" ...

array_append is defined thus:

regression=# \df array_append
                           List of functions
  Result data type |   Schema   |     Name     | Argument data types
------------------+------------+--------------+----------------------
  anyarray         | pg_catalog | array_append | anyarray, anyelement
(1 row)

So the "||" operator sees (unknown, regprocedure), and make_op tries to
coerce the unknown literal to an array of regprocedure, which of course
fails. If instead the literal is explicitly cast:

select 'GRANT EXECUTE ON '::text || 1142::regprocedure;
ERROR:  operator does not exist: text || regprocedure
HINT:  No operator matches the given name and argument type(s). You may
need to add explicit type casts.

I'm not clear on how we can do better :(. Any suggestions?

Joe

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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: grant execute on many functions
Следующее
От: Peter Eisentraut
Дата:
Сообщение: Re: PITR Error Message assistance