(CREATE TEMP | 'DROP') TABLE en una (funcion | transaccion) ¿?

From: Victor Lopez <v(dot)lopez(dot)s(at)ono(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: (CREATE TEMP | 'DROP') TABLE en una (funcion | transaccion) ¿?
Date: 2007-03-25 04:32:11
Message-ID: 200703250632.11528.v.lopez.s@ono.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Saludos.
La situacion es la siguiente ...
test=# -----------------------------------------------------------------------------------------------------------------------
test=# CREATE FUNCTION plpgsql_call_handler() RETURNS language_handler
AS '$libdir/plpgsql' LANGUAGE C;
CREATE FUNCTION
test=# CREATE FUNCTION plpgsql_validator(oid) RETURNS void
AS '$libdir/plpgsql' LANGUAGE C;
CREATE FUNCTION
test=# CREATE TRUSTED PROCEDURAL LANGUAGE plpgsql HANDLER plpgsql_call_handler
VALIDATOR plpgsql_validator;
NOTICE: usando información de pg_pltemplate en vez de los parámetros de
CREATE LANGUAGE
CREATE LANGUAGE
test=# CREATE DOMAIN domUsuario AS VARCHAR(16) NOT NULL CONSTRAINT usuarioChk
CHECK(VALUE ~ '^[a-zA-Z0-9]{8,}$');
CREATE DOMAIN
test=# CREATE OR REPLACE FUNCTION usuarioOK(VARCHAR(16)) RETURNS boolean AS
test-# $$
test$# BEGIN
test$# BEGIN
test$# CREATE TEMP TABLE TabUsuario (usuario domUsuario) ON COMMIT DROP;
test$# INSERT INTO TabUsuario(usuario) VALUES ($1);
test$# RETURN true;
test$# EXCEPTION
test$# WHEN check_violation THEN
test$# RETURN false;
test$# END;
test$# END;
test$# $$
test-# LANGUAGE plpgsql
test-# SECURITY DEFINER;
CREATE FUNCTION
test=# SELECT usuarioOK('gtfrthjuk');
usuariook
-----------
t
(1 fila)

test=# -- Hasta aqui, todo bien
test=# --
test=# SELECT usuarioOK('gtf');
ERROR: no existe la relación con OID 17123
CONTEXT: sentencia SQL: «INSERT INTO TabUsuario(usuario) VALUES ( $1 )»
PL/pgSQL function "usuariook" line 4 at SQL statement
test=# SELECT usuarioOK('gtfrthjuk');
ERROR: no existe la relación con OID 17123
CONTEXT: sentencia SQL: «INSERT INTO TabUsuario(usuario) VALUES ( $1 )»
PL/pgSQL function "usuariook" line 4 at SQL statement
test=# -----------------------------------------------------------------------------------------------------------------------

Al ser una tabla temporal, con ON COMMIT DROP no debería eliminarse al acabar
la transacción )
Porque ... una función es una transacción (por defecto) ... ¿no?

Al entrar en la función / transacción se crea siempre antes de hacer el
INSERT ... ¿no?
¿Entonces el OID de que es?

O yo hago algo mal (para no variar) o ...

¿Alguien me lo puede explicar?

NOTA : El ejemplo es real y no 'retocado'.

--
----o---( )---o----
Saludos de Victor Lopez Sabio
v(dot)lopez(dot)s(at)ono(dot)com
--------oooo--------

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Jaime Casanova 2007-03-25 04:54:04 Re: (CREATE TEMP | 'DROP') TABLE en una (funcion | transaccion) ¿?
Previous Message Daniel Ricardo Medina 2007-03-25 03:01:40 RE: Ayuda urgente