diff --git a/Makefile b/Makefile index 7a4b88c..56678af 100644 --- a/Makefile +++ b/Makefile @@ -3,7 +3,10 @@ EXTVERSION = 0.8.0 MODULE_big = vector DATA = $(wildcard sql/*--*--*.sql) -DATA_built = sql/$(EXTENSION)--$(EXTVERSION).sql +# This change is needed to install different per-version SQL files +# like pgvector--0.8.0.sql and pgvector--0.7.4.sql +# The corresponding file is downloaded during the Docker image build process +DATA_built = sql/$(EXTENSION)--$(EXTVERSION).sql sql/vector--0.7.4.sql OBJS = src/bitutils.o src/bitvec.o src/halfutils.o src/halfvec.o src/hnsw.o src/hnswbuild.o src/hnswinsert.o src/hnswscan.o src/hnswutils.o src/hnswvacuum.o src/ivfbuild.o src/ivfflat.o src/ivfinsert.o src/ivfkmeans.o src/ivfscan.o src/ivfutils.o src/ivfvacuum.o src/sparsevec.o src/vector.o HEADERS = src/halfvec.h src/sparsevec.h src/vector.h diff --git a/src/hnswbuild.c b/src/hnswbuild.c index b667478..dc95d89 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -843,9 +843,17 @@ HnswParallelBuildMain(dsm_segment *seg, shm_toc *toc) hnswarea = shm_toc_lookup(toc, PARALLEL_KEY_HNSW_AREA, false); +#ifdef NEON_SMGR + smgr_start_unlogged_build(RelationGetSmgr(indexRel)); +#endif + /* Perform inserts */ HnswParallelScanAndInsert(heapRel, indexRel, hnswshared, hnswarea, false); +#ifdef NEON_SMGR + smgr_finish_unlogged_build_phase_1(RelationGetSmgr(indexRel)); +#endif + /* Close relations within worker */ index_close(indexRel, indexLockmode); table_close(heapRel, heapLockmode); @@ -1100,12 +1108,39 @@ BuildIndex(Relation heap, Relation index, IndexInfo *indexInfo, SeedRandom(42); #endif +#ifdef NEON_SMGR + smgr_start_unlogged_build(RelationGetSmgr(index)); +#endif + InitBuildState(buildstate, heap, index, indexInfo, forkNum); BuildGraph(buildstate, forkNum); - if (RelationNeedsWAL(index) || forkNum == INIT_FORKNUM) +#ifdef NEON_SMGR + smgr_finish_unlogged_build_phase_1(RelationGetSmgr(index)); +#endif + + if (RelationNeedsWAL(index) || forkNum == INIT_FORKNUM) { log_newpage_range(index, forkNum, 0, RelationGetNumberOfBlocksInFork(index, forkNum), true); +#ifdef NEON_SMGR + { +#if PG_VERSION_NUM >= 160000 + RelFileLocator rlocator = RelationGetSmgr(index)->smgr_rlocator.locator; +#else + RelFileNode rlocator = RelationGetSmgr(index)->smgr_rnode.node; +#endif + if (set_lwlsn_block_range_hook) + set_lwlsn_block_range_hook(XactLastRecEnd, rlocator, + MAIN_FORKNUM, 0, RelationGetNumberOfBlocks(index)); + if (set_lwlsn_relation_hook) + set_lwlsn_relation_hook(XactLastRecEnd, rlocator, MAIN_FORKNUM); + } +#endif + } + +#ifdef NEON_SMGR + smgr_end_unlogged_build(RelationGetSmgr(index)); +#endif FreeBuildState(buildstate); }