Re: Temp table exists test??

Поиск
Список
Период
Сортировка
От Michael Guerin
Тема Re: Temp table exists test??
Дата
Msg-id 4202F5C0.5090905@rentec.com
обсуждение исходный текст
Ответ на Re: Temp table exists test??  (Michael Fuhr <mike@fuhr.org>)
Ответы Re: Temp table exists test??  (William Yu <wyu@talisys.com>)
Список pgsql-novice
>On Thu, Feb 03, 2005 at 09:39:08PM -0500, Michael Guerin wrote:
>
>
>>I'm trying to detect the existence of a temp table in a function for
>>that connection.
>>
>>
>
>Why do you need to know this?  So you don't try to create a temporary
>table multiple times?
>
>
It's in reference to a post the other day "Function to blame?"  I'm
running into an issue that causes the database to get corrupted  under a
heavy load.    Everytime it get corrupted, it's always in this function
that creates a temp table, fills it, sends back the results and drops
the table.  This one function is heavily used.

That said, we know that every thread has it's own connection.   So, I
would like to modify the function to create the temp table the first
time its used, and truncate it every other time reducing the number of
entries in the pg_class, pg_type,... tables that we experienced
corruption in.  This is why I need to know if the connection created the
temp table.

>>Connection 1:
>>Create table foo (i int);
>>
>>Connection 2:
>>select * from pg_class where relname = 'foo'
>>
>>returns the table from connection 1, however I need to know if there's a
>>temp table foo for connection 2 not connection 1.  Each row in pg_class
>>is associated with a namespace, so I'm looking for something like:
>>
>>select * from pg_class where relname = 'foo' and relnamespace = ???
>>
>>
>
>If you don't care whether the table is temporary or not then you
>could simply test if it's visible:
>
>SELECT *
>FROM pg_class
>WHERE relname = 'foo'
>  AND relkind = 'r'
>  AND pg_table_is_visible(oid);
>
>If you want to limit the query to temporary tables, then you could
>join pg_class with pg_namespace and look for temporary schema names:
>
>SELECT n.nspname, c.relname
>FROM pg_class AS c
>JOIN pg_namespace AS n ON n.oid = c.relnamespace
>WHERE c.relname = 'foo'
>  AND c.relkind = 'r'
>  AND n.nspname LIKE 'pg_temp_%'
>  AND pg_table_is_visible(c.oid);
>
>Is that what you're looking for?
>
>
>
select * from pg_class with relname = 'foo' and
pg_table_is_visible(oid)  doesn't seem to work.  I just created a table,
opened another connection and ran this query and it came back with the
new table I just created.  I'll will try you other example as well as Tom's.

Thanks
Michael


В списке pgsql-novice по дате отправления:

Предыдущее
От: Michael Fuhr
Дата:
Сообщение: Re: Temp table exists test??
Следующее
От: Michael Guerin
Дата:
Сообщение: Re: Temp table exists test??