When faced with a similiar sounding problem I tried the following with
some success. It is an extreme alternative and not suited to all
situations...that having been said, here goes.
pg_dump mytable >> mytable.txt
You said
> When I dump the table to disk I get records in sequence by primary key
> from 1 to 115847 before it crashes.
I looked at the mytable.txt file and found the last entry that pg_dump
was able to copy and noted the primary key number (115847).
I then executed a quiery that deleted the very next primary key number
(115848) record. (*BAD! Lost that data record. BAD!*)
I was then able to do a pg_dump of the entire table followed by a
vacuum/analyze. (*Good. PG is running correctly. Good*)
In my singular case the loss of one data record is acceptable. It may
not be for you. Try this resolve only at your own risk and peril.
Peace
- Bill