I wrote: > Actually, I would say the bug is exec_assign_value's. There is nothing > at all wrong with a function returning one of its input values; for > example the smaller/larger functions all do that.
For that matter, you don't need a function at all: regression=# create or replace function copyit(text) returns text as $$ regression$# declare tmp text; regression$# begin regression$# tmp := $1; regression$# tmp := tmp; regression$# return tmp; regression$# end$$ language plpgsql stable; CREATE FUNCTION regression=# select copyit('foo'); ERROR: out of memory DETAIL: Failed on request of size 1065320319. CONTEXT: PL/pgSQL function "copyit" line 4 at assignment regression=# This makes it perfectly clear that the problem is that exec_assign_value must copy the given value before it frees the old, just in case they're the same. (Hmm, I wonder if we can shortcircuit the whole thing ...) regards, tom lane ---------------------------(end of broadcast)--------------------------- TIP 9: the planner will ignore your desire to choose an index scan if your joining column's datatypes do not match