Tom Lane wrote:
Joe Conway <[EMAIL PROTECTED]> 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

---------------------------(end of broadcast)---------------------------
TIP 8: explain analyze is your friend

Reply via email to