Re: BUG #13796: ALTER TYPE DROP COLUMN -- unexpected behavior ?

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pplachta(at)gmail(dot)com
Cc: pgsql-bugs(at)postgresql(dot)org
Subject: Re: BUG #13796: ALTER TYPE DROP COLUMN -- unexpected behavior ?
Date: 2015-12-08 18:16:38
Message-ID: 13819.1449598598@sss.pgh.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

pplachta(at)gmail(dot)com writes:
> create type complex as (a1 int, a2 numeric, a3 text, a4 int, a5 int);
> create or replace function foo(arg complex) returns complex as $$
> begin
> return ( select arg );
> end; $$ language plpgsql;
> alter type complex drop attribute a4;
> [ foo() stops working ]

Yeah, the problem is that since "arg" has a named composite type, it is
handled using the PLPGSQL_DTYPE_ROW code path, which sets up a plpgsql
Datum for each column at function compile time. So the rowtype is baked
into the function at that point. If you start a fresh session everything
is fine.

A real fix might involve switching over to the PLPGSQL_DTYPE_REC code
path, which I've advocated for for some time but it'd be pretty invasive.
Or perhaps we could arrange to force recompilation of a plpgsql function
if any composite type it depends on has changed. Nobody's really gotten
excited enough about this to do either ...

regards, tom lane

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Kevin Grittner 2015-12-08 18:31:33 Re: BUG #13798: Unexpected multiple exection of user defined function with out parameters
Previous Message David G. Johnston 2015-12-08 16:40:11 Re: BUG #13799: Unexpected multiple exection of user defined function with out parameters