Thread: Bug in functions returning setof where table has dropped column?

Bug in functions returning setof where table has dropped column?

From
Stephen Quinney
Date:
I really cannot tell if this is a bug or I am just doing something
stupid.

I create a table called wibble:

CREATE TABLE wibble (a integer, b integer);

I insert some data:

INSERT INTO wibble VALUES (1,1);

I decide that actually I want column b to be a BIGINT, so I do:

ALTER TABLE wibble ADD COLUMN c BIGINT;
UPDATE wibble SET c = b;
ALTER TABLE wibble DROP COLUMN b;
ALTER TABLE wibble RENAME c TO b;

I have written a function which shows fairly simply my problem.

CREATE FUNCTION foobar() RETURNS SETOF wibble AS
'SELECT * FROM wibble' LANGUAGE SQL;

Doing 'select * from foobar();' gives me the error:

ERROR: query-specified return row and actual function return row do not
match

I have tested it on other tables where I have not messed around with
any columns like this and it does not occur for them.

I am using postgresql 7.4.1 on Debian sid/unstable (i386).

I would love to know what I have done wrong here, if this is not a bug.

Thanks in advance,

Stephen Quinney


Re: Bug in functions returning setof where table has dropped column?

From
Tom Lane
Date:
Stephen Quinney <stephen.quinney@computing-services.oxford.ac.uk> writes:
> I have written a function which shows fairly simply my problem.

> CREATE FUNCTION foobar() RETURNS SETOF wibble AS
> 'SELECT * FROM wibble' LANGUAGE SQL;

> Doing 'select * from foobar();' gives me the error:

> ERROR: query-specified return row and actual function return row do not
> match

Yeah, there are various bits of the system that are still not fully
comfortable with dropped columns, and that's one of them.  Not sure
how hard it would be to fix this particular problem.

            regards, tom lane