odd (maybe) procedure cacheing behaviour - Mailing list pgsql-general

From Tim.Colles@ed.ac.uk
Subject odd (maybe) procedure cacheing behaviour
Date
Msg-id 6689469b-3681-a082-371e-88308e1b4bea@ed.ac.uk
Whole thread Raw
List pgsql-general
See noddy example below (v14.6).

Presumably this is a result of procedure cacheing as per docs.  The EXECUTE
plan is being prepared fresh (again as expected from the docs and per the error
message) but is the input argument type of NEW.x for the format() call still
cached? Is altering a table column used in a trigger function something that
can be detected and the cache then invalidated? Also "parameter 14" - is there
a way to correlate back from the error message what that paramater acually
corresponds to for the user?

Tim


=# create table a ( x text );
CREATE TABLE

=# create function a_t () returns trigger language plpgsql as $$ begin execute format('select least(%L)', NEW.x);
returnnull; end; $$; 
CREATE FUNCTION

=# create trigger a_i after insert on a for each row execute function a_t();
CREATE TRIGGER

=# insert into a values ( '1' );
INSERT 0 1

=# alter table a alter column x type integer using x::integer;
ALTER TABLE

=# insert into a values ( 1 );
ERROR:  type of parameter 14 (integer) does not match that when preparing the plan (text)
CONTEXT:  PL/pgSQL function a_t() line 1 at EXECUTE

=# create or replace function a_t () returns trigger language plpgsql as $$ begin execute format('select least(%L)',
NEW.x);return null; end; $$; 
CREATE FUNCTION

=# insert into a values ( 1 );
INSERT 0 1
The University of Edinburgh is a charitable body, registered in Scotland, with registration number SC005336. Is e
buidheanncarthannais a th’ ann an Oilthigh Dhùn Èideann, clàraichte an Alba, àireamh clàraidh SC005336. 



pgsql-general by date:

Previous
From: Laurenz Albe
Date:
Subject: Re: Is the PL/pgSQL refcursor useful in a modern three-tier app?
Next
From: Dávid Suchan
Date:
Subject: pg_upgrade Only the install user can be defined in the new cluster