Justin Pryzby <pryzby@telsasoft.com> writes:
> This also appears to break checksums.
I was wondering about that, because the typical pattern for use of
smgrextend for indexes seems to be
RelationOpenSmgr(rel);
PageSetChecksumInplace(page, lastblock);
smgrextend(rel->rd_smgr, MAIN_FORKNUM, lastblock, zerobuf.data, false);
and gist_indexsortbuild wasn't doing either of the first two things.
gist_indexsortbuild_flush_ready_pages looks like it might be
a few bricks shy of a load too. But my local CLOBBER_CACHE_ALWAYS
run hasn't gotten to anything except the pretty-trivial index
made in point.sql, so I don't have evidence about it.
Another interesting point is that all the other index AMs seem to WAL-log
the new page before the smgrextend call, whereas this code is doing it
in the other order. I strongly doubt that both patterns are equally
correct. Could be that the other AMs are in the wrong though.
regards, tom lane