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