2013/10/7 Andres Freund <and...@2ndquadrant.com> > On 2013-10-07 16:00:54 +0200, Pavel Stehule wrote: > > /* > > * We need to do subscript evaluation, > which might require > > @@ -4321,6 +4322,14 @@ exec_assign_value(PLpgSQL_execstate *estate, > > oldarrayval = (ArrayType *) > DatumGetPointer(oldarraydatum); > > > > /* > > + * support fast update for array scalar > variable is enabled only > > + * when target is a scalar variable and > variable holds a local > > + * copy of some array. > > + */ > > + inplace_update = (((PLpgSQL_datum *) > target)->dtype == PLPGSQL_DTYPE_VAR > > + && > ((PLpgSQL_var *) target)->freeval); > > + > > + /* > > * Build the modified array value. > > */ > > Will this recognize if the local Datum is just a reference to an > external toast Datum (i.e. varattrib_1b_e)? > > this works on plpgsql local copies only (when cleaning is controlled by plpgsql) - so it should be untoasted every time.
btw when I tested this patch I found a second plpgsql array issue - repeated untoasting :( and we should not forget it. > I don't know much about plpgsql's implementation, so please excuse if > the question is stupid. > > Greetings, > > Andres Freund > > -- > Andres Freund http://www.2ndQuadrant.com/ > PostgreSQL Development, 24x7 Support, Training & Services >