Обсуждение: cached plan issue in trigger func

Поиск
Список
Период
Сортировка

cached plan issue in trigger func

От
Andrew Dunstan
Дата:
I thought we had fixed this in 8.3:
   cap=# create table t1 (t varchar(40));   CREATE TABLE   cap=# create table t2 (t varchar(40));   CREATE TABLE
cap=#create function t1trig() returns trigger language plpgsql as   $$ begin insert into t2 values(new.t); return null;
end;$$;   CREATE FUNCTION   cap=# create trigger t1trigger after insert on t1 for each row   execute procedure
t1trig();  CREATE TRIGGER   cap=# insert into t1 values('a');   INSERT 184789343 1   cap=# alter table t1 alter column
ttype text;   ALTER TABLE   cap=# alter table t2 alter column t type text;   ALTER TABLE   cap=# insert into t1
values('b');  ERROR:  type of "new.t" does not match that when preparing the plan   CONTEXT:  PL/pgSQL function
"t1trig"line 1 at SQL statement   cap=#
 



cheers

andrew


Re: cached plan issue in trigger func

От
Tom Lane
Дата:
Andrew Dunstan <andrew@dunslane.net> writes:
> I thought we had fixed this in 8.3:

I think that behavior is intentional: plancache.c can deal with the plan
changing internally, but it doesn't expect that its callers could
survive the plan's argument datatypes changing underneath them.
        regards, tom lane


Re: cached plan issue in trigger func

От
Andrew Dunstan
Дата:

Tom Lane wrote:
> Andrew Dunstan <andrew@dunslane.net> writes:
>   
>> I thought we had fixed this in 8.3:
>>     
>
> I think that behavior is intentional: plancache.c can deal with the plan
> changing internally, but it doesn't expect that its callers could
> survive the plan's argument datatypes changing underneath them.
>   

How do we reconcile that with this advertised feature of 8.3?:

  * Automatically re-plan cached queries when table definitions change    or statistics are updated


How is a user to know when s/he can rely on this and when they can't? I 
at least was expecting the plan to be invalidated by the table changes.


cheers

andrew