On Sat, Mar 28, 2015 at 3:37 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
Jeff Janes <jeff.janes@gmail.com> writes: > Analyze on functional indexes cannot be interrupted very easily. > ... > The attached patch fixes it, but don't vouch for its safety.
Hm. The other per-sample-row loops in analyze.c use vacuum_delay_point() rather than CHECK_FOR_INTERRUPTS() directly. Ordinarily that wouldn't make much difference here, but maybe a slow index function might be incurring I/O?
That isn't the case for me (and if it were, they wouldn't be going through the buffer manager anyway and so would not trigger delay criteria), but that seems like a valid concern in general. It also explains why I couldn't find CHECK_FOR_INTERRUPTS in other loops of that file, because I was looking for the wrong spelling.
Adding a vacuum_delay_point does solve the immediately observed problem, both the toy one and the more realistic one.