On 2016-03-25 12:02:05 -0400, Robert Haas wrote:
> Gosh, that's surprising. I wonder if that just revealed an underlying
> issue rather than creating it.
I think that's the case; it's just somewhat unlikely to hit in other
cases.
If SMgrRelation->md_fd[n] is an empty relation, and mdread() or another
routine is asking for a block in the second segment - which will error
out. But even if the first segment is zero bytes, _mdfd_getseg() will
dutifully try to open the second segment. Which will succeed in the case
of a truncated relation, because we leave the truncated segment in
place.
ISTM that _mdfd_getseg better check the length of the last segment
before opening the next one?
Regards,
Andres