| 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: | Whole Thread | Raw Message | 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.
| 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 |