Re: "ERROR: could not read block 6 ...: read only 0 of 8192 bytes" after autovacuum cancelled
Alvaro Herrera <alvherre@commandprompt.com>
From: Alvaro Herrera <alvherre@commandprompt.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: Pg Hackers <pgsql-hackers@postgresql.org>
Date: 2009-11-06T17:18:15Z
Lists: pgsql-hackers
Attachments
- vactrunc-nointerrupt-2-81.patch (text/x-diff) patch
Tom Lane wrote: > Alvaro Herrera <alvherre@commandprompt.com> writes: > > Tom Lane wrote: > >> I would argue that once we've truncated, it's too late to abort. The > >> interrupt facility should be disabled from just before issuing the > >> truncate till after commit. It would probably be relatively painless to > >> do that with some manipulation of the interrupt holdoff stuff. > > > That cures my (admittedly simplistic) testcase. The patch is a bit ugly > > because the interrupts are held off in lazy_vacuum_rel and need to be > > released by its caller. I don't see any other way around the problem > > though. > > I wonder whether we shouldn't extend this into VACUUM FULL too, to > prevent cancel once it's done that internal commit. It would fix > the "PANIC: can't abort a committed transaction" problem V.F. has. Hmm, it seems to work. The attached is for 8.1. -- Alvaro Herrera http://www.CommandPrompt.com/ The PostgreSQL Company - Command Prompt, Inc.