From a1e526ef828842ff4b04af6536f0a28692d13eb0 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Mon, 22 Jan 2024 23:52:54 -0800 Subject: [PATCH] Dropped support for Postgres 11 --- .github/workflows/build.yml | 2 - CHANGELOG.md | 3 +- META.json | 2 +- src/hnsw.c | 17 +------ src/hnsw.h | 12 +---- src/hnswbuild.c | 88 ++--------------------------------- src/hnswscan.c | 5 -- src/hnswutils.c | 16 ------- src/ivfbuild.c | 91 ++----------------------------------- src/ivfflat.c | 17 +------ src/ivfflat.h | 10 ---- src/ivfscan.c | 18 -------- src/vector.c | 22 +-------- 13 files changed, 18 insertions(+), 285 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 327ffdf..59d3604 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -20,8 +20,6 @@ jobs: os: ubuntu-20.04 - postgres: 12 os: ubuntu-20.04 - - postgres: 11 - os: ubuntu-20.04 steps: - uses: actions/checkout@v4 - uses: ankane/setup-postgres@v1 diff --git a/CHANGELOG.md b/CHANGELOG.md index e86edc7..d5ad068 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## 0.5.2 (unreleased) +## 0.6.0 (unreleased) - Improved performance of HNSW - Added support for parallel index builds for HNSW @@ -6,6 +6,7 @@ - Reduced WAL generation for HNSW index builds - Fixed error with logical replication - Fixed `invalid memory alloc request size` error with HNSW index build +- Dropped support for Postgres 11 ## 0.5.1 (2023-10-10) diff --git a/META.json b/META.json index 38d3919..d31b207 100644 --- a/META.json +++ b/META.json @@ -12,7 +12,7 @@ "prereqs": { "runtime": { "requires": { - "PostgreSQL": "11.0.0" + "PostgreSQL": "12.0.0" } } }, diff --git a/src/hnsw.c b/src/hnsw.c index 708819a..84df1d2 100644 --- a/src/hnsw.c +++ b/src/hnsw.c @@ -4,15 +4,12 @@ #include #include "access/amapi.h" +#include "commands/progress.h" #include "commands/vacuum.h" #include "hnsw.h" #include "utils/guc.h" #include "utils/selfuncs.h" -#if PG_VERSION_NUM >= 120000 -#include "commands/progress.h" -#endif - int hnsw_ef_search; int hnsw_lock_tranche_id; static relopt_kind hnsw_relopt_kind; @@ -75,7 +72,6 @@ HnswInit(void) /* * Get the name of index build phase */ -#if PG_VERSION_NUM >= 120000 static char * hnswbuildphasename(int64 phasenum) { @@ -89,7 +85,6 @@ hnswbuildphasename(int64 phasenum) return NULL; } } -#endif /* * Estimate the cost of an index scan @@ -104,9 +99,6 @@ hnswcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, int m; int entryLevel; Relation index; -#if PG_VERSION_NUM < 120000 - List *qinfos; -#endif /* Never use index without order */ if (path->indexorderbys == NULL) @@ -132,12 +124,7 @@ hnswcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, /* Account for number of tuples (or entry level), m, and ef_search */ costs.numIndexTuples = (entryLevel + 2) * m; -#if PG_VERSION_NUM >= 120000 genericcostestimate(root, path, loop_count, &costs); -#else - qinfos = deconstruct_indexquals(path); - genericcostestimate(root, path, loop_count, qinfos, &costs); -#endif /* Use total cost since most work happens before first tuple is returned */ *indexStartupCost = costs.indexTotalCost; @@ -231,9 +218,7 @@ hnswhandler(PG_FUNCTION_ARGS) amroutine->amcostestimate = hnswcostestimate; amroutine->amoptions = hnswoptions; amroutine->amproperty = NULL; /* TODO AMPROP_DISTANCE_ORDERABLE */ -#if PG_VERSION_NUM >= 120000 amroutine->ambuildphasename = hnswbuildphasename; -#endif amroutine->amvalidate = hnswvalidate; #if PG_VERSION_NUM >= 140000 amroutine->amadjustmembers = NULL; diff --git a/src/hnsw.h b/src/hnsw.h index b3281fe..77147d1 100644 --- a/src/hnsw.h +++ b/src/hnsw.h @@ -12,12 +12,8 @@ #include "utils/sampling.h" #include "vector.h" -#if PG_VERSION_NUM < 110000 -#error "Requires PostgreSQL 11+" -#endif - #if PG_VERSION_NUM < 120000 -#include "access/relscan.h" +#error "Requires PostgreSQL 12+" #endif #define HNSW_MAX_DIM 2000 @@ -215,16 +211,10 @@ typedef struct HnswShared int nparticipantsdone; double reltuples; HnswGraph graphData; - -#if PG_VERSION_NUM < 120000 - ParallelHeapScanDescData heapdesc; /* must come last */ -#endif } HnswShared; -#if PG_VERSION_NUM >= 120000 #define ParallelTableScanFromHnswShared(shared) \ (ParallelTableScanDesc) ((char *) (shared) + BUFFERALIGN(sizeof(HnswShared))) -#endif typedef struct HnswLeader { diff --git a/src/hnswbuild.c b/src/hnswbuild.c index 9199d0e..5edf48c 100644 --- a/src/hnswbuild.c +++ b/src/hnswbuild.c @@ -39,12 +39,16 @@ #include #include "access/parallel.h" +#include "access/table.h" +#include "access/tableam.h" #include "access/xact.h" #include "catalog/index.h" +#include "commands/progress.h" #include "hnsw.h" #include "miscadmin.h" #include "lib/pairingheap.h" #include "nodes/pg_list.h" +#include "optimizer/optimizer.h" #include "storage/bufmgr.h" #include "tcop/tcopprot.h" #include "utils/datum.h" @@ -52,15 +56,8 @@ #if PG_VERSION_NUM >= 140000 #include "utils/backend_progress.h" -#elif PG_VERSION_NUM >= 120000 -#include "pgstat.h" -#endif - -#if PG_VERSION_NUM >= 120000 -#include "access/tableam.h" -#include "commands/progress.h" #else -#define PROGRESS_CREATEIDX_TUPLES_DONE 0 +#include "pgstat.h" #endif #if PG_VERSION_NUM >= 130000 @@ -69,26 +66,13 @@ #define CALLBACK_ITEM_POINTER HeapTuple hup #endif -#if PG_VERSION_NUM >= 120000 #define UpdateProgress(index, val) pgstat_progress_update_param(index, val) -#else -#define UpdateProgress(index, val) ((void)val) -#endif #if PG_VERSION_NUM >= 140000 #include "utils/backend_status.h" #include "utils/wait_event.h" #endif -#if PG_VERSION_NUM >= 120000 -#include "access/table.h" -#include "optimizer/optimizer.h" -#else -#include "access/heapam.h" -#include "optimizer/planner.h" -#include "pgstat.h" -#endif - #define PARALLEL_KEY_HNSW_SHARED UINT64CONST(0xA000000000000001) #define PARALLEL_KEY_HNSW_AREA UINT64CONST(0xA000000000000002) #define PARALLEL_KEY_QUERY_TEXT UINT64CONST(0xA000000000000003) @@ -781,11 +765,7 @@ static void HnswParallelScanAndInsert(Relation heapRel, Relation indexRel, HnswShared * hnswshared, char *hnswarea, bool progress) { HnswBuildState buildstate; -#if PG_VERSION_NUM >= 120000 TableScanDesc scan; -#else - HeapScanDesc scan; -#endif double reltuples; IndexInfo *indexInfo; @@ -796,18 +776,11 @@ HnswParallelScanAndInsert(Relation heapRel, Relation indexRel, HnswShared * hnsw buildstate.graph = &hnswshared->graphData; buildstate.hnswarea = hnswarea; InitAllocator(&buildstate.allocator, &HnswSharedMemoryAlloc, &buildstate); -#if PG_VERSION_NUM >= 120000 scan = table_beginscan_parallel(heapRel, ParallelTableScanFromHnswShared(hnswshared)); reltuples = table_index_build_scan(heapRel, indexRel, indexInfo, true, progress, BuildCallback, (void *) &buildstate, scan); -#else - scan = heap_beginscan_parallel(heapRel, &hnswshared->heapdesc); - reltuples = IndexBuildHeapScan(heapRel, indexRel, indexInfo, - true, BuildCallback, - (void *) &buildstate, scan); -#endif /* Record statistics */ SpinLockAcquire(&hnswshared->mutex); @@ -864,11 +837,7 @@ HnswParallelBuildMain(dsm_segment *seg, shm_toc *toc) } /* Open relations within worker */ -#if PG_VERSION_NUM >= 120000 heapRel = table_open(hnswshared->heaprelid, heapLockmode); -#else - heapRel = heap_open(hnswshared->heaprelid, heapLockmode); -#endif indexRel = index_open(hnswshared->indexrelid, indexLockmode); hnswarea = shm_toc_lookup(toc, PARALLEL_KEY_HNSW_AREA, false); @@ -878,11 +847,7 @@ HnswParallelBuildMain(dsm_segment *seg, shm_toc *toc) /* Close relations within worker */ index_close(indexRel, indexLockmode); -#if PG_VERSION_NUM >= 120000 table_close(heapRel, heapLockmode); -#else - heap_close(heapRel, heapLockmode); -#endif } /* @@ -907,19 +872,7 @@ HnswEndParallel(HnswLeader * hnswleader) static Size ParallelEstimateShared(Relation heap, Snapshot snapshot) { -#if PG_VERSION_NUM >= 120000 return add_size(BUFFERALIGN(sizeof(HnswShared)), table_parallelscan_estimate(heap, snapshot)); -#else - if (!IsMVCCSnapshot(snapshot)) - { - Assert(snapshot == SnapshotAny); - return sizeof(HnswShared); - } - - return add_size(offsetof(HnswShared, heapdesc) + - offsetof(ParallelHeapScanDescData, phs_snapshot_data), - EstimateSnapshotSpace(snapshot)); -#endif } /* @@ -958,11 +911,7 @@ HnswBeginParallel(HnswBuildState * buildstate, bool isconcurrent, int request) /* Enter parallel mode and create context */ EnterParallelMode(); Assert(request > 0); -#if PG_VERSION_NUM >= 120000 pcxt = CreateParallelContext("vector", "HnswParallelBuildMain", request); -#else - pcxt = CreateParallelContext("vector", "HnswParallelBuildMain", request, true); -#endif /* Get snapshot for table scan */ if (!isconcurrent) @@ -1019,13 +968,9 @@ HnswBeginParallel(HnswBuildState * buildstate, bool isconcurrent, int request) /* Initialize mutable state */ hnswshared->nparticipantsdone = 0; hnswshared->reltuples = 0; -#if PG_VERSION_NUM >= 120000 table_parallelscan_initialize(buildstate->heap, ParallelTableScanFromHnswShared(hnswshared), snapshot); -#else - heap_parallelscan_initialize(&hnswshared->heapdesc, buildstate->heap, snapshot); -#endif hnswarea = (char *) shm_toc_allocate(pcxt->toc, esthnswarea); /* Report less than allocated so never fails */ @@ -1120,15 +1065,8 @@ BuildGraph(HnswBuildState * buildstate, ForkNumber forkNum) if (buildstate->hnswleader) buildstate->reltuples = ParallelHeapScan(buildstate); else - { -#if PG_VERSION_NUM >= 120000 buildstate->reltuples = table_index_build_scan(buildstate->heap, buildstate->index, buildstate->indexInfo, true, true, BuildCallback, (void *) buildstate, NULL); -#else - buildstate->reltuples = IndexBuildHeapScan(buildstate->heap, buildstate->index, buildstate->indexInfo, - true, BuildCallback, (void *) buildstate, NULL); -#endif - } buildstate->indtuples = buildstate->graph->indtuples; } @@ -1142,22 +1080,6 @@ BuildGraph(HnswBuildState * buildstate, ForkNumber forkNum) HnswEndParallel(buildstate->hnswleader); } -#if PG_VERSION_NUM < 110008 -void -log_newpage_range(Relation rel, ForkNumber forkNum, BlockNumber startblk, BlockNumber endblk, bool page_std) -{ - for (BlockNumber blkno = startblk; blkno < endblk; blkno++) - { - Buffer buf = ReadBufferExtended(rel, forkNum, blkno, RBM_NORMAL, NULL); - - LockBuffer(buf, BUFFER_LOCK_EXCLUSIVE); - MarkBufferDirty(buf); - log_newpage_buffer(buf, page_std); - UnlockReleaseBuffer(buf); - } -} -#endif - /* * Build the index */ diff --git a/src/hnswscan.c b/src/hnswscan.c index fb7954f..e46c657 100644 --- a/src/hnswscan.c +++ b/src/hnswscan.c @@ -201,12 +201,7 @@ hnswgettuple(IndexScanDesc scan, ScanDirection dir) MemoryContextSwitchTo(oldCtx); -#if PG_VERSION_NUM >= 120000 scan->xs_heaptid = *heaptid; -#else - scan->xs_ctup.t_self = *heaptid; -#endif - scan->xs_recheckorderby = false; return true; } diff --git a/src/hnswutils.c b/src/hnswutils.c index e3fa0be..98d4710 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -56,13 +56,6 @@ hash_tid(ItemPointerData tid) #define SH_DEFINE #include "lib/simplehash.h" -/* Needed to include simplehash.h twice */ -#if PG_VERSION_NUM < 120000 -#undef SH_EQUAL -#define sh_log2 pointerhash_sh_log2 -#define sh_pow2 pointerhash_sh_pow2 -#endif - /* Pointer hash table */ static uint32 hash_pointer(uintptr_t ptr) @@ -84,15 +77,6 @@ hash_pointer(uintptr_t ptr) #define SH_DEFINE #include "lib/simplehash.h" -/* Needed to include simplehash.h again */ -#if PG_VERSION_NUM < 120000 -#undef SH_EQUAL -#undef sh_log2 -#undef sh_pow2 -#define sh_log2 offsethash_sh_log2 -#define sh_pow2 offsethash_sh_pow2 -#endif - /* Offset hash table */ static uint32 hash_offset(Size offset) diff --git a/src/ivfbuild.c b/src/ivfbuild.c index 8cdaf1e..3c9ae1e 100644 --- a/src/ivfbuild.c +++ b/src/ivfbuild.c @@ -2,30 +2,25 @@ #include +#include "access/table.h" +#include "access/tableam.h" #include "access/parallel.h" #include "access/xact.h" #include "catalog/index.h" #include "catalog/pg_operator_d.h" #include "catalog/pg_type_d.h" +#include "commands/progress.h" #include "ivfflat.h" #include "miscadmin.h" +#include "optimizer/optimizer.h" #include "storage/bufmgr.h" #include "tcop/tcopprot.h" #include "utils/memutils.h" #if PG_VERSION_NUM >= 140000 #include "utils/backend_progress.h" -#elif PG_VERSION_NUM >= 120000 -#include "pgstat.h" -#endif - -#if PG_VERSION_NUM >= 120000 -#include "access/tableam.h" -#include "commands/progress.h" #else -#define PROGRESS_CREATEIDX_SUBPHASE 0 -#define PROGRESS_CREATEIDX_TUPLES_TOTAL 0 -#define PROGRESS_CREATEIDX_TUPLES_DONE 0 +#include "pgstat.h" #endif #if PG_VERSION_NUM >= 130000 @@ -34,26 +29,13 @@ #define CALLBACK_ITEM_POINTER HeapTuple hup #endif -#if PG_VERSION_NUM >= 120000 #define UpdateProgress(index, val) pgstat_progress_update_param(index, val) -#else -#define UpdateProgress(index, val) ((void)val) -#endif #if PG_VERSION_NUM >= 140000 #include "utils/backend_status.h" #include "utils/wait_event.h" #endif -#if PG_VERSION_NUM >= 120000 -#include "access/table.h" -#include "optimizer/optimizer.h" -#else -#include "access/heapam.h" -#include "optimizer/planner.h" -#include "pgstat.h" -#endif - #define PARALLEL_KEY_IVFFLAT_SHARED UINT64CONST(0xA000000000000001) #define PARALLEL_KEY_TUPLESORT UINT64CONST(0xA000000000000002) #define PARALLEL_KEY_IVFFLAT_CENTERS UINT64CONST(0xA000000000000003) @@ -150,13 +132,8 @@ SampleRows(IvfflatBuildState * buildstate) { BlockNumber targblock = BlockSampler_Next(&buildstate->bs); -#if PG_VERSION_NUM >= 120000 table_index_build_range_scan(buildstate->heap, buildstate->index, buildstate->indexInfo, false, true, false, targblock, 1, SampleCallback, (void *) buildstate, NULL); -#else - IndexBuildHeapRangeScan(buildstate->heap, buildstate->index, buildstate->indexInfo, - false, true, targblock, 1, SampleCallback, (void *) buildstate, NULL); -#endif } } @@ -282,11 +259,7 @@ InsertTuples(Relation index, IvfflatBuildState * buildstate, ForkNumber forkNum) IndexTuple itup = NULL; /* silence compiler warning */ int64 inserted = 0; -#if PG_VERSION_NUM >= 120000 TupleTableSlot *slot = MakeSingleTupleTableSlot(buildstate->tupdesc, &TTSOpsMinimalTuple); -#else - TupleTableSlot *slot = MakeSingleTupleTableSlot(buildstate->tupdesc); -#endif TupleDesc tupdesc = RelationGetDescr(index); UpdateProgress(PROGRESS_CREATEIDX_SUBPHASE, PROGRESS_IVFFLAT_PHASE_LOAD); @@ -375,20 +348,12 @@ InitBuildState(IvfflatBuildState * buildstate, Relation heap, Relation index, In elog(ERROR, "dimensions must be greater than one for this opclass"); /* Create tuple description for sorting */ -#if PG_VERSION_NUM >= 120000 buildstate->tupdesc = CreateTemplateTupleDesc(3); -#else - buildstate->tupdesc = CreateTemplateTupleDesc(3, false); -#endif TupleDescInitEntry(buildstate->tupdesc, (AttrNumber) 1, "list", INT4OID, -1, 0); TupleDescInitEntry(buildstate->tupdesc, (AttrNumber) 2, "tid", TIDOID, -1, 0); TupleDescInitEntry(buildstate->tupdesc, (AttrNumber) 3, "vector", RelationGetDescr(index)->attrs[0].atttypid, -1, 0); -#if PG_VERSION_NUM >= 120000 buildstate->slot = MakeSingleTupleTableSlot(buildstate->tupdesc, &TTSOpsVirtual); -#else - buildstate->slot = MakeSingleTupleTableSlot(buildstate->tupdesc); -#endif buildstate->centers = VectorArrayInit(buildstate->lists, buildstate->dimensions); buildstate->listInfo = palloc(sizeof(ListInfo) * buildstate->lists); @@ -631,11 +596,7 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S { SortCoordinate coordinate; IvfflatBuildState buildstate; -#if PG_VERSION_NUM >= 120000 TableScanDesc scan; -#else - HeapScanDesc scan; -#endif double reltuples; IndexInfo *indexInfo; @@ -659,18 +620,11 @@ IvfflatParallelScanAndSort(IvfflatSpool * ivfspool, IvfflatShared * ivfshared, S buildstate.centers->length = buildstate.centers->maxlen; ivfspool->sortstate = tuplesort_begin_heap(buildstate.tupdesc, 1, attNums, sortOperators, sortCollations, nullsFirstFlags, sortmem, coordinate, false); buildstate.sortstate = ivfspool->sortstate; -#if PG_VERSION_NUM >= 120000 scan = table_beginscan_parallel(ivfspool->heap, ParallelTableScanFromIvfflatShared(ivfshared)); reltuples = table_index_build_scan(ivfspool->heap, ivfspool->index, indexInfo, true, progress, BuildCallback, (void *) &buildstate, scan); -#else - scan = heap_beginscan_parallel(ivfspool->heap, &ivfshared->heapdesc); - reltuples = IndexBuildHeapScan(ivfspool->heap, ivfspool->index, indexInfo, - true, BuildCallback, - (void *) &buildstate, scan); -#endif /* Execute this worker's part of the sort */ tuplesort_performsort(ivfspool->sortstate); @@ -740,11 +694,7 @@ IvfflatParallelBuildMain(dsm_segment *seg, shm_toc *toc) } /* Open relations within worker */ -#if PG_VERSION_NUM >= 120000 heapRel = table_open(ivfshared->heaprelid, heapLockmode); -#else - heapRel = heap_open(ivfshared->heaprelid, heapLockmode); -#endif indexRel = index_open(ivfshared->indexrelid, indexLockmode); /* Initialize worker's own spool */ @@ -764,11 +714,7 @@ IvfflatParallelBuildMain(dsm_segment *seg, shm_toc *toc) /* Close relations within worker */ index_close(indexRel, indexLockmode); -#if PG_VERSION_NUM >= 120000 table_close(heapRel, heapLockmode); -#else - heap_close(heapRel, heapLockmode); -#endif } /* @@ -793,19 +739,7 @@ IvfflatEndParallel(IvfflatLeader * ivfleader) static Size ParallelEstimateShared(Relation heap, Snapshot snapshot) { -#if PG_VERSION_NUM >= 120000 return add_size(BUFFERALIGN(sizeof(IvfflatShared)), table_parallelscan_estimate(heap, snapshot)); -#else - if (!IsMVCCSnapshot(snapshot)) - { - Assert(snapshot == SnapshotAny); - return sizeof(IvfflatShared); - } - - return add_size(offsetof(IvfflatShared, heapdesc) + - offsetof(ParallelHeapScanDescData, phs_snapshot_data), - EstimateSnapshotSpace(snapshot)); -#endif } /* @@ -856,11 +790,7 @@ IvfflatBeginParallel(IvfflatBuildState * buildstate, bool isconcurrent, int requ /* Enter parallel mode and create context */ EnterParallelMode(); Assert(request > 0); -#if PG_VERSION_NUM >= 120000 pcxt = CreateParallelContext("vector", "IvfflatParallelBuildMain", request); -#else - pcxt = CreateParallelContext("vector", "IvfflatParallelBuildMain", request, true); -#endif scantuplesortstates = leaderparticipates ? request + 1 : request; @@ -918,13 +848,9 @@ IvfflatBeginParallel(IvfflatBuildState * buildstate, bool isconcurrent, int requ #ifdef IVFFLAT_KMEANS_DEBUG ivfshared->inertia = 0; #endif -#if PG_VERSION_NUM >= 120000 table_parallelscan_initialize(buildstate->heap, ParallelTableScanFromIvfflatShared(ivfshared), snapshot); -#else - heap_parallelscan_initialize(&ivfshared->heapdesc, buildstate->heap, snapshot); -#endif /* Store shared tuplesort-private state, for which we reserved space */ sharedsort = (Sharedsort *) shm_toc_allocate(pcxt->toc, estsort); @@ -1023,15 +949,8 @@ AssignTuples(IvfflatBuildState * buildstate) if (buildstate->ivfleader) buildstate->reltuples = ParallelHeapScan(buildstate); else - { -#if PG_VERSION_NUM >= 120000 buildstate->reltuples = table_index_build_scan(buildstate->heap, buildstate->index, buildstate->indexInfo, true, true, BuildCallback, (void *) buildstate, NULL); -#else - buildstate->reltuples = IndexBuildHeapScan(buildstate->heap, buildstate->index, buildstate->indexInfo, - true, BuildCallback, (void *) buildstate, NULL); -#endif - } #ifdef IVFFLAT_KMEANS_DEBUG PrintKmeansMetrics(buildstate); diff --git a/src/ivfflat.c b/src/ivfflat.c index d6383f4..f1f53ea 100644 --- a/src/ivfflat.c +++ b/src/ivfflat.c @@ -3,16 +3,13 @@ #include #include "access/amapi.h" +#include "commands/progress.h" #include "commands/vacuum.h" #include "ivfflat.h" #include "utils/guc.h" #include "utils/selfuncs.h" #include "utils/spccache.h" -#if PG_VERSION_NUM >= 120000 -#include "commands/progress.h" -#endif - int ivfflat_probes; static relopt_kind ivfflat_relopt_kind; @@ -38,7 +35,6 @@ IvfflatInit(void) /* * Get the name of index build phase */ -#if PG_VERSION_NUM >= 120000 static char * ivfflatbuildphasename(int64 phasenum) { @@ -56,7 +52,6 @@ ivfflatbuildphasename(int64 phasenum) return NULL; } } -#endif /* * Estimate the cost of an index scan @@ -72,9 +67,6 @@ ivfflatcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, double ratio; double spc_seq_page_cost; Relation index; -#if PG_VERSION_NUM < 120000 - List *qinfos; -#endif /* Never use index without order */ if (path->indexorderbys == NULL) @@ -105,12 +97,7 @@ ivfflatcostestimate(PlannerInfo *root, IndexPath *path, double loop_count, */ costs.numIndexTuples = path->indexinfo->tuples * ratio; -#if PG_VERSION_NUM >= 120000 genericcostestimate(root, path, loop_count, &costs); -#else - qinfos = deconstruct_indexquals(path); - genericcostestimate(root, path, loop_count, qinfos, &costs); -#endif get_tablespace_page_costs(path->indexinfo->reltablespace, NULL, &spc_seq_page_cost); @@ -227,9 +214,7 @@ ivfflathandler(PG_FUNCTION_ARGS) amroutine->amcostestimate = ivfflatcostestimate; amroutine->amoptions = ivfflatoptions; amroutine->amproperty = NULL; /* TODO AMPROP_DISTANCE_ORDERABLE */ -#if PG_VERSION_NUM >= 120000 amroutine->ambuildphasename = ivfflatbuildphasename; -#endif amroutine->amvalidate = ivfflatvalidate; #if PG_VERSION_NUM >= 140000 amroutine->amadjustmembers = NULL; diff --git a/src/ivfflat.h b/src/ivfflat.h index 1eb35b0..b35d8a5 100644 --- a/src/ivfflat.h +++ b/src/ivfflat.h @@ -16,10 +16,6 @@ #include "common/pg_prng.h" #endif -#if PG_VERSION_NUM < 120000 -#include "access/relscan.h" -#endif - #ifdef IVFFLAT_BENCH #include "portability/instr_time.h" #endif @@ -135,16 +131,10 @@ typedef struct IvfflatShared #ifdef IVFFLAT_KMEANS_DEBUG double inertia; #endif - -#if PG_VERSION_NUM < 120000 - ParallelHeapScanDescData heapdesc; /* must come last */ -#endif } IvfflatShared; -#if PG_VERSION_NUM >= 120000 #define ParallelTableScanFromIvfflatShared(shared) \ (ParallelTableScanDesc) ((char *) (shared) + BUFFERALIGN(sizeof(IvfflatShared))) -#endif typedef struct IvfflatLeader { diff --git a/src/ivfscan.c b/src/ivfscan.c index e6a96bb..5f612db 100644 --- a/src/ivfscan.c +++ b/src/ivfscan.c @@ -105,12 +105,7 @@ GetScanItems(IndexScanDesc scan, Datum value) IvfflatScanOpaque so = (IvfflatScanOpaque) scan->opaque; TupleDesc tupdesc = RelationGetDescr(scan->indexRelation); double tuples = 0; - -#if PG_VERSION_NUM >= 120000 TupleTableSlot *slot = MakeSingleTupleTableSlot(so->tupdesc, &TTSOpsVirtual); -#else - TupleTableSlot *slot = MakeSingleTupleTableSlot(so->tupdesc); -#endif /* * Reuse same set of shared buffers for scan @@ -216,22 +211,14 @@ ivfflatbeginscan(Relation index, int nkeys, int norderbys) so->collation = index->rd_indcollation[0]; /* Create tuple description for sorting */ -#if PG_VERSION_NUM >= 120000 so->tupdesc = CreateTemplateTupleDesc(2); -#else - so->tupdesc = CreateTemplateTupleDesc(2, false); -#endif TupleDescInitEntry(so->tupdesc, (AttrNumber) 1, "distance", FLOAT8OID, -1, 0); TupleDescInitEntry(so->tupdesc, (AttrNumber) 2, "heaptid", TIDOID, -1, 0); /* Prep sort */ so->sortstate = tuplesort_begin_heap(so->tupdesc, 1, attNums, sortOperators, sortCollations, nullsFirstFlags, work_mem, NULL, false); -#if PG_VERSION_NUM >= 120000 so->slot = MakeSingleTupleTableSlot(so->tupdesc, &TTSOpsMinimalTuple); -#else - so->slot = MakeSingleTupleTableSlot(so->tupdesc); -#endif so->listQueue = pairingheap_allocate(CompareLists, scan); @@ -321,12 +308,7 @@ ivfflatgettuple(IndexScanDesc scan, ScanDirection dir) { ItemPointer heaptid = (ItemPointer) DatumGetPointer(slot_getattr(so->slot, 2, &so->isnull)); -#if PG_VERSION_NUM >= 120000 scan->xs_heaptid = *heaptid; -#else - scan->xs_ctup.t_self = *heaptid; -#endif - scan->xs_recheckorderby = false; return true; } diff --git a/src/vector.c b/src/vector.c index 79d6bf4..982b176 100644 --- a/src/vector.c +++ b/src/vector.c @@ -3,6 +3,7 @@ #include #include "catalog/pg_type.h" +#include "common/shortest_dec.h" #include "fmgr.h" #include "hnsw.h" #include "ivfflat.h" @@ -11,6 +12,7 @@ #include "port.h" /* for strtof() */ #include "utils/array.h" #include "utils/builtins.h" +#include "utils/float.h" #include "utils/lsyscache.h" #include "utils/numeric.h" #include "vector.h" @@ -19,13 +21,6 @@ #include "varatt.h" #endif -#if PG_VERSION_NUM >= 120000 -#include "common/shortest_dec.h" -#include "utils/float.h" -#else -#include -#endif - #if PG_VERSION_NUM < 130000 #define TYPALIGN_DOUBLE 'd' #define TYPALIGN_INT 'i' @@ -293,15 +288,6 @@ vector_out(PG_FUNCTION_ARGS) char *ptr; int n; -#if PG_VERSION_NUM < 120000 - int ndig = FLT_DIG + extra_float_digits; - - if (ndig < 1) - ndig = 1; - -#define FLOAT_SHORTEST_DECIMAL_LEN (ndig + 10) -#endif - /* * Need: * @@ -325,11 +311,7 @@ vector_out(PG_FUNCTION_ARGS) ptr++; } -#if PG_VERSION_NUM >= 120000 n = float_to_shortest_decimal_bufn(vector->x[i], ptr); -#else - n = sprintf(ptr, "%.*g", ndig, vector->x[i]); -#endif ptr += n; } *ptr = ']';