Thanks. So, the hack we did is okay then? Does using the substring
function de-TOAST it?
On Feb 4, 2006, at 11:24 AM, Tom Lane wrote:
> Claire McLister <mclister@zeesource.net> writes:
>> This was all working fine until E.Value became some large strings
>> with some occasional funny characters.
>
>> The hack that solved the problem was:
>
>> R.Field := substring(E.Value from 1);
>
>> This is a complete hack, so I'd like to find out what is going
>> wrong and why this worked. For now, it keeps the system functional.
>
> Oooh. You were probably dealing with values that had gotten large
> enough to be "toasted", ie, stored out-of-line in a TOAST table.
> So the datum being passed around in memory was just a pointer to the
> row in the TOAST table. Dropping the temp table made its TOAST table
> go away, resulting in a dangling pointer stored in the plpgsql
> variable.
>
> The easy fix would be to forcibly detoast any value stored into a
> plpgsql variable, but the performance implications of that seem a
> bit nasty. Not sure I want to do it for such a weird corner case...
>
> regards, tom lane
>
> ---------------------------(end of
> broadcast)---------------------------
> TIP 5: don't forget to increase your free space map settings