On Sun, Sep 20, 2020 at 05:10:05PM -0400, Tom Lane wrote: > I wrote: > > It appears that hyrax (CLOBBER_CACHE_ALWAYS) is not very happy > > with this: > > https://buildfarm.postgresql.org/cgi-bin/show_log.pl?nm=hyrax&dt=2020-09-19%2021%3A27%3A23 > > I reproduced that and traced it to a missing RelationOpenSmgr call. > Fixed now.
This also appears to break checksums. postgres=# CREATE TABLE pvactst (i INT, a INT[], p POINT) with (autovacuum_enabled = off); postgres=# CREATE INDEX gist_pvactst ON pvactst USING gist (p); postgres=# INSERT INTO pvactst SELECT i, array[1,2,3], point(i, i+1) FROM generate_series(1,1000) i; WARNING: page verification failed, calculated checksum 34313 but expected 0 ERROR: invalid page in block 0 of relation base/12859/16389 I was able to make this work like so: @@ -449,6 +450,7 @@ gist_indexsortbuild(GISTBuildState *state) /* Write out the root */ PageSetLSN(pagestate->page, GistBuildLSN); + PageSetChecksumInplace(pagestate->page, GIST_ROOT_BLKNO, state->indexrel->rd_smgr); smgrwrite(state->indexrel->rd_smgr, MAIN_FORKNUM, GIST_ROOT_BLKNO, pagestate->page, true); if (RelationNeedsWAL(state->indexrel)) @@ -555,6 +557,7 @@ gist_indexsortbuild_flush_ready_pages(GISTBuildState *state) PageSetLSN(page, GistBuildLSN); + PageSetChecksumInplace(page, state->pages_written, state->indexrel->rd_smgr); smgrextend(state->indexrel->rd_smgr, MAIN_FORKNUM, state->pages_written++, -- Justin