Re: alter table tablename add column - breaks pl/pgsql function returns tablename

From: Amit kapila <amit(dot)kapila(at)huawei(dot)com>
To: Palle Girgensohn <girgen(at)FreeBSD(dot)org>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: alter table tablename add column - breaks pl/pgsql function returns tablename
Date: 2012-11-01 04:14:18
Message-ID: 6C0B27F7206C9E4CA54AE035729E9C382854651B@szxeml509-mbx
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers


On Wednesday, October 31, 2012 11:50 PM Palle Girgensohn wrote:
Hash: SHA1

Hi!

> This is an old problem, referred to in bug #4907:

>ALTER TABLE test ADD COLUMN foo INTEGER;
> SELECT * FROM test_func();
> - -- ERROR: wrong record type supplied in RETURN NEXT

> You have to run create or replace again to fix it when changing the
> schema. How come it fails? Is the return type "hardcoded" when the
> function is created?
I think it is because compiled body of function is created with that type of table. You will not see this problem if you reconnect or select from another new session.

> Is this very hard to fix?

Currently the compiled body is not discarded on DDL's, so I believe it is not a bug as per current implementation.
However it can be thought of as a new feature.

> IS there a suggested work-around?
Considering DDL's are used less often, you can see how feasible it is for you that after a DDL, you reconnect sessions which use functions.
I know this is not good workaround, but I am sorry nothing else comes to my mind for now.

Anybody else can think of any other better workarounds for this problem?

With Regards,
Amit Kapila.

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Michael Paquier 2012-11-01 04:31:34 Re: Synchronous commit not... synchronous?
Previous Message Peter Eisentraut 2012-11-01 04:05:33 Re: [COMMITTERS] pgsql: Preserve intermediate .c files in coverage mode