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: | Raw Message | Whole Thread | 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 |