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]