Alejandro D. Burne escribió: > 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).
Esto fue corregido hasta cierto punto en 8.3. Tu ejemplo funciona: alvherre=> CREATE TABLE _test AS SELECT 1::SMALLINT; SELECT alvherre=> CREATE OR REPLACE VIEW _vtest AS SELECT * FROM _test; CREATE VIEW alvherre=> CREATE FUNCTION _ftest() RETURNS void AS alvherre-> $BODY$ BEGIN PERFORM 1 FROM _vtest; RETURN; END $BODY$ LANGUAGE 'plp sql' VOLATILE; CREATE FUNCTION alvherre=> SELECT * FROM _ftest(); _ftest -------- (1 ligne) alvherre=> DROP VIEW _vtest; DROP VIEW alvherre=> CREATE VIEW _vtest AS SELECT *, 2 FROM _test; CREATE VIEW alvherre=> SELECT * FROM _ftest(); _ftest -------- (1 ligne) -- Alvaro Herrera http://www.amazon.com/gp/registry/CTMLCN8V17R4 "Puedes elegir el color de tu auto -- siempre y cuando sea negro." (Henry Ford) -- TIP 5: ¿Has leído nuestro extenso FAQ? http://www.postgresql.org/docs/faqs.FAQ.html