Tom Lane <[EMAIL PROTECTED]> writes: > Joe Conway <[EMAIL PROTECTED]> writes: > > Andrzej Kosmala wrote: > >> PostgreSQL 7.3 on Linux > >> After dropping column functions return error message: "ERROR: > >> Query-specified return tuple and actual function return tuple do not match" > > > Hmmm, looks like nodeFunctionscan.c:tupledesc_mismatch needs to be > > taught about attisdropped. I'll submit a patch this evening if no one > > else gets to it first. > > Actually, I believe I deliberately left it like that because I was > concerned about what would happen in this scenario. I don't think that > changing tupledesc_mismatch to ignore attisdropped columns will make > things work nicely. If a function is expecting to return (a,b,c) and > then you drop b from the table that defines its return type, is the > function likely to magically return (a,c)? I doubt it. Letting the > code get past the mismatch check is likely to result in core dumps. > > I had toyed with the notion of forbidding column drop (and maybe column > add too, not sure) whenever a table's rowtype appears as a function > argument or result type; but I'm not sure that's sufficient to protect > against problems ... >
OK, but after dropping column, it is impossible to create _any_ proper working function. Only drop/create table solves this problem. template1=# create table test(id integer, name text); CREATE TABLE template1=# INSERT INTO test VALUES (1,'a'); INSERT 25332 1 template1=# create function ftest() returns setof test as 'select * from test' language 'sql'; CREATE FUNCTION template1=# select * from ftest(); id | name ----+------ 1 | a (1 row) template1=# DROP FUNCTION ftest(); DROP FUNCTION template1=# alter table test drop column name; ALTER TABLE template1=# create function ftest() returns setof test as 'select * from test' language 'sql'; CREATE FUNCTION template1=# select * from ftest(); ERROR: Query-specified return tuple and actual function return tuple do not match Andrzej Kosmala ---------------------------(end of broadcast)--------------------------- TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]