Probablemente se haya planteado anteriormente el caso. Algunas veces
uno modifica estructuras de una vista remota, para ello (cuando
cambian los campos que la componen, por ejemplo) necesita eliminarla y
volver a crearla. El problema se presenta si esa vista es utilizada en
una función, ya que al borrarla no genera ninguna advertencia y luego
al ejecutar la función nos devuelve un error sobre un objeto
inexistente (adjunto un ejemplo). En bases de datos complejas de
muchos objetos muchas veces a uno se les puede escapar alguna
referencia y puede ser un dolor de cabeza.
Es un postgres 8.2.6 compilado para linux 64 bits.

Welcome to psql 8.1.4 (server 8.2.6), the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

WARNING:  You are connected to a server with major version 8.2,
but your psql client is major version 8.1.  Some backslash commands,
such as \d, might not work properly.

A=> CREATE TABLE _test AS SELECT 1::SMALLINT;
SELECT
A=> CREATE OR REPLACE VIEW _vtest AS SELECT * FROM _test;
CREATE VIEW
A=> CREATE FUNCTION _ftest() RETURNS void AS
A-> $BODY$
A$> BEGIN
A$> PERFORM 1 FROM _vtest;
A$> RETURN;
A$> END
A$> $BODY$
A-> LANGUAGE 'plpgsql' VOLATILE;
CREATE FUNCTION
A=> SELECT * FROM _ftest();
 _ftest
--------

(1 row)

A=> DROP VIEW _vtest;
DROP VIEW
A=> CREATE VIEW _vtest AS SELECT *, 2 FROM _test;
CREATE VIEW
A=> SELECT * FROM _ftest();
ERROR:  relation with OID 4566408 does not exist
CONTEXT:  SQL statement "SELECT  1 FROM _vtest"
PL/pgSQL function "_ftest" line 2 at perform


Saludos, Alejandro
--
TIP 2: puedes desuscribirte de todas las listas simultáneamente
    (envía "unregister TuDirecciónDeCorreo" a [EMAIL PROTECTED])

Responder a