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