Re: Esquema temporal en uso

From: "Julio Cesar Rodriguez Dominguez" <jurasec(at)gmail(dot)com>
To: Oswaldo Hernández <listas(at)soft-com(dot)es>
Cc: "Lista Postgres" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Esquema temporal en uso
Date: 2008-05-08 15:39:13
Message-ID: 925902880805080839p4a0fdcfy8b8954c6066a83a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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;

>
> Espero haberme explicado un poco mejor.
>
> Saludos,
>
> --
> *****************************************
> 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.
>

--
:: Jc3 ::

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Daniel 2008-05-08 15:39:14 Re: Replicación de Tabla de Oracle a PostgreSQL
Previous Message Giorgio Cristal 2008-05-08 15:37:21 Power Designer y PosgreSQL