The way that heap_update() and heap_delete() are currently coded, they
hold the buffer context lock on the buffer containing the old tuple
while they invoke heap_tuple_toast_attrs(). This strikes me as at least
inefficient and at worst a source of deadlock. Is it possible to avoid
holding the buffer lock while doing the TOAST manipulations?
regards, tom lane