pgvector.git / summary / log / commit / refs

commit    35ab919bf5da677709b2ebb8be07480bb25e97cf
Author:   Andrew Kane <andrew@ankane.org>
Date:     Thu Jan 22 00:40:35 2026 +0000

    Switched to statically-allocated IndexAmRoutine for Postgres 19 [skip ci]


src/hnsw.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ivfflat.c | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 118 insertions(+) diff --git a/src/hnsw.c b/src/hnsw.c index 891d0701..bfc92a1c 100644 --- a/src/hnsw.c +++ b/src/hnsw.c @@ -266,6 +266,64 @@ FUNCTION_PREFIX PG_FUNCTION_INFO_V1(hnswhandler); Datum hnswhandler(PG_FUNCTION_ARGS) { +#if PG_VERSION_NUM >= 190000 + static const IndexAmRoutine amroutine = { + .type = T_IndexAmRoutine, + .amstrategies = 0, + .amsupport = 3, + .amoptsprocnum = 0, + .amcanorder = false, + .amcanorderbyop = true, + .amcanhash = false, + .amconsistentequality = false, + .amconsistentordering = false, + .amcanbackward = false, + .amcanunique = false, + .amcanmulticol = false, + .amoptionalkey = true, + .amsearcharray = false, + .amsearchnulls = false, + .amstorage = false, + .amclusterable = false, + .ampredlocks = false, + .amcanparallel = false, + .amcanbuildparallel = true, + .amcaninclude = false, + .amusemaintenanceworkmem = false, + .amsummarizing = false, + .amparallelvacuumoptions = VACUUM_OPTION_PARALLEL_BULKDEL, + .amkeytype = InvalidOid, + + .ambuild = hnswbuild, + .ambuildempty = hnswbuildempty, + .aminsert = hnswinsert, + .aminsertcleanup = NULL, + .ambulkdelete = hnswbulkdelete, + .amvacuumcleanup = hnswvacuumcleanup, + .amcanreturn = NULL, + .amcostestimate = hnswcostestimate, + .amgettreeheight = NULL, + .amoptions = hnswoptions, + .amproperty = NULL, + .ambuildphasename = hnswbuildphasename, + .amvalidate = hnswvalidate, + .amadjustmembers = NULL, + .ambeginscan = hnswbeginscan, + .amrescan = hnswrescan, + .amgettuple = hnswgettuple, + .amgetbitmap = NULL, + .amendscan = hnswendscan, + .ammarkpos = NULL, + .amrestrpos = NULL, + .amestimateparallelscan = NULL, + .aminitparallelscan = NULL, + .amparallelrescan = NULL, + .amtranslatestrategy = NULL, + .amtranslatecmptype = NULL, + }; + + PG_RETURN_POINTER(&amroutine); +#else IndexAmRoutine *amroutine = makeNode(IndexAmRoutine); amroutine->amstrategies = 0; @@ -339,4 +397,5 @@ hnswhandler(PG_FUNCTION_ARGS) #endif PG_RETURN_POINTER(amroutine); +#endif } diff --git a/src/ivfflat.c b/src/ivfflat.c index 49c14783..8489d936 100644 --- a/src/ivfflat.c +++ b/src/ivfflat.c @@ -184,6 +184,64 @@ FUNCTION_PREFIX PG_FUNCTION_INFO_V1(ivfflathandler); Datum ivfflathandler(PG_FUNCTION_ARGS) { +#if PG_VERSION_NUM >= 190000 + static const IndexAmRoutine amroutine = { + .type = T_IndexAmRoutine, + .amstrategies = 0, + .amsupport = 5, + .amoptsprocnum = 0, + .amcanorder = false, + .amcanorderbyop = true, + .amcanhash = false, + .amconsistentequality = false, + .amconsistentordering = false, + .amcanbackward = false, + .amcanunique = false, + .amcanmulticol = false, + .amoptionalkey = true, + .amsearcharray = false, + .amsearchnulls = false, + .amstorage = false, + .amclusterable = false, + .ampredlocks = false, + .amcanparallel = false, + .amcanbuildparallel = true, + .amcaninclude = false, + .amusemaintenanceworkmem = false, + .amsummarizing = false, + .amparallelvacuumoptions = VACUUM_OPTION_PARALLEL_BULKDEL, + .amkeytype = InvalidOid, + + .ambuild = ivfflatbuild, + .ambuildempty = ivfflatbuildempty, + .aminsert = ivfflatinsert, + .aminsertcleanup = NULL, + .ambulkdelete = ivfflatbulkdelete, + .amvacuumcleanup = ivfflatvacuumcleanup, + .amcanreturn = NULL, + .amcostestimate = ivfflatcostestimate, + .amgettreeheight = NULL, + .amoptions = ivfflatoptions, + .amproperty = NULL, + .ambuildphasename = ivfflatbuildphasename, + .amvalidate = ivfflatvalidate, + .amadjustmembers = NULL, + .ambeginscan = ivfflatbeginscan, + .amrescan = ivfflatrescan, + .amgettuple = ivfflatgettuple, + .amgetbitmap = NULL, + .amendscan = ivfflatendscan, + .ammarkpos = NULL, + .amrestrpos = NULL, + .amestimateparallelscan = NULL, + .aminitparallelscan = NULL, + .amparallelrescan = NULL, + .amtranslatestrategy = NULL, + .amtranslatecmptype = NULL, + }; + + PG_RETURN_POINTER(&amroutine); +#else IndexAmRoutine *amroutine = makeNode(IndexAmRoutine); amroutine->amstrategies = 0; @@ -257,4 +315,5 @@ ivfflathandler(PG_FUNCTION_ARGS) #endif PG_RETURN_POINTER(amroutine); +#endif } [parent: 5c08be02917f]