Re: Esquema temporal en uso

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.

In response to

Browse pgsql-es-ayuda by date

  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