On Jul 15, 2011, at 9:41 AM, Tom Lane wrote:

> Well, actually, that code flat out doesn't work, so whether relistemp is
> available in 9.1 is the least of your problems.  Consider what would
> happen if two concurrent sessions did this with the same temp table
> name.

Oh. Duh.

> How about doing this instead?
> 
>        SELECT pg_catalog.format_type(a.atttypid, a.atttypmod)
>          FROM pg_catalog.pg_attribute a
>          JOIN pg_catalog.pg_class c ON a.attrelid = c.oid
>         WHERE c.oid = 'pg_temp.tablenamehere'::pg_catalog.regclass
>           AND attnum > 0
>           AND NOT attisdropped
>         ORDER BY attnum

I always forget that "$schema.$tablename"::regclass will work.

> This would only work in releases that know the pg_temp abbreviation,
> which includes any minor release later than March 2007.  But since
> relistemp doesn't even exist before 8.4 (released in 2009), that's still
> more backwards-portable than what you've got.  You could also just do
> 'tablenamehere'::pg_catalog.regclass and trust that the user didn't move
> pg_temp to the back of the search path.

Yeah, this is a much better solution. Many thanks, Tom, just what I needed.

Best,

David



-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to