| From: | Oswaldo Hernández <listas(at)soft-com(dot)es> | 
|---|---|
| To: | Julio Cesar Rodriguez Dominguez <jurasec(at)gmail(dot)com> | 
| Cc: | Lista Postgres <pgsql-es-ayuda(at)postgresql(dot)org> | 
| Subject: | Re: Esquema temporal en uso | 
| Date: | 2008-05-08 15:47:52 | 
| Message-ID: | 482320A8.90000@soft-com.es | 
| Views: | Whole Thread | Raw Message | Download mbox | Resend email | 
| Thread: | |
| Lists: | pgsql-es-ayuda | 
Julio Cesar Rodriguez Dominguez escribió:
> On Thu, May 8, 2008 at 5:11 PM, Oswaldo Hernández <listas(at)soft-com(dot)es> wrote:
>> Julio Cesar Rodriguez Dominguez escribió:
>>> On Thu, May 8, 2008 at 10:25 AM, Oswaldo Hernández <listas(at)soft-com(dot)es>
>>> wrote:
>>>> Hola,
>>>>
>>>> Tengo una funcion que necesita comprobar si se han creado previamente
>>>> unas
>>>> tablas temporales para regenerarlas si es necesario.
>>>>
>>>> Para verificar si existe una tabla suelo hacer una lectura en pg_class
>>>> buscando tabla y esquema, pero en el caso de las tablas temporales no se
>>>> que
>>>> esquema esta utilizando la sesion actual.
>>>>
>>>> ¿Como puedo averiguar cual es el esquema temporal que esta utilizando la
>>>> sesion?
>>> A ver si entendi bien, quieres saber en que tabla del sistema se esta
>>> guardando el nombre de tu tabla temporal, para poder consultar si
>>> existe o no, y de ahí decidir si debes crearla?
>>> Si fuera eso, puedes consultar pg_statio_user_tables.
>> una funcion crea una tabla temporal:
>>    create temp table tabla_temporal (.......)
>>
>> Al ser una tabla temporal postgres la crea en un schema llamado pg_temp_X,
>> donde X es un numero que le asigna postgres.
>>
>> En otro momento, y siempre dentro de la misma sesion, otra funcion necesita
>> verificar la existencia de esta tabla. El nombre de la tabla lo sabe, pero
>> lo que no sabe es el nombre que le ha asignado postgres al esquema temporal.
>>
>> pg_statio_user_tables no me vale porque si esta accion se realiza desde mas
>> de una sesion me muestra  todas las tablas temporales activas de *todas* las
>> sesiones, y no puedo averiguar cual es la que corresponde a la sesion
>> actual.
>>
>> Puedo intentar crear de nuevo la tabla y capturar el error si ya existiera,
>> pero me gustaria poder hacerlo consultando los catálogos.
>    Intenta con esta consulta:
> 
> SELECT n.nspname as "Schema", c.relname as "Name",  r.rolname as
> "Owner" FROM pg_catalog.pg_class c  JOIN pg_catalog.pg_roles r ON
> r.oid = c.relowner   LEFT JOIN pg_catalog.pg_namespace n ON n.oid =
> c.relnamespace WHERE c.relkind IN ('r','v','S','')   AND n.nspname <>
> 'pg_catalog' AND n.nspname !~ '^pg_toast'  AND
> pg_catalog.pg_table_is_visible(c.oid) and c.relname like
> 'nombre_tabla_temporal%' ORDER BY 1,2;
> 
Perfecto :)
Gracias.
-- 
*****************************************
Oswaldo Hernández
oswaldo (@) soft-com (.) es
*****************************************
PD:
Antes de imprimir este mensaje, asegúrese de que es necesario.
El medio ambiente está en nuestra mano.
| From | Date | Subject | |
|---|---|---|---|
| Next Message | Javier Ochoa (uolsinectis) | 2008-05-08 15:52:49 | RE: Power Designer y PosgreSQL | 
| Previous Message | Julio Cesar Rodriguez Dominguez | 2008-05-08 15:43:15 | Re: Funciones Sencillas: Problema con type casts |