Oliver Elphick <olly@lfix.co.uk> writes:
> I tried to use regclass() in a plpgsql function to derive a tablename
> from its oid so as to build a command string, but I am unable to use the
> value returned because it cannot be cast to anything. Therefore I will
> have to use a complex query on the catalog to do the same work.
Hmm? plpgsql is about as permissive as you can get on this point.
Just assign the result to a variable of the desired type, and it will
do it if the textual representations are at all compatible. Example:
regression=# create function foo(oid) returns text as '
regression'# declare z text;
regression'# begin
regression'# z := $1::regclass;
regression'# return z;
regression'# end' language plpgsql;
CREATE FUNCTION
regression=# select 'pg_proc'::regclass::oid;oid
------1255
(1 row)
regression=# select foo(1255); foo
---------pg_proc
(1 row)
> This seems overly restrictive. Would there be a problem in allowing
> regclass() to be cast to text?
I'm on record that we should allow (explicit) casting to and from text
for all types, using the types' I/O functions to implement it. But
plpgsql already provides essentially that mechanism in its assignment
operations. You just hafta do the explicit assignment...
regards, tom lane