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