From 2f50fcbf293acda9d61c177114ba654fe08600a3 Mon Sep 17 00:00:00 2001 From: Narek Galstyan Date: Fri, 20 Feb 2026 20:33:18 -0500 Subject: [PATCH 1/3] Do not hardcode 8k but use BLCKSZ to accomodate whpg's 32k blocks Co-authored-by: Artjoms Iskovs Signed-off-by: Narek Galstyan --- src/index/vchordrq/am/am_build.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/index/vchordrq/am/am_build.rs b/src/index/vchordrq/am/am_build.rs index 5803c772..647d2478 100644 --- a/src/index/vchordrq/am/am_build.rs +++ b/src/index/vchordrq/am/am_build.rs @@ -517,9 +517,10 @@ mod vchordrq_cached { } let pages_s = buffer.len(); buffer.extend(pages.iter().flat_map(|x| unsafe { - std::mem::transmute::<&PostgresPage, &[u8; 8192]>( - x.as_ref(), - ) + std::mem::transmute::< + &PostgresPage, + &[u8; pgrx::pg_sys::BLCKSZ as usize], + >(x.as_ref()) })); let pages_e = buffer.len(); while buffer.len() % ALIGN != 0 { From 0c201468328175c7f64aaf68d55fe9116ca7384d Mon Sep 17 00:00:00 2001 From: Narek Galstyan Date: Wed, 18 Feb 2026 14:35:19 -0500 Subject: [PATCH 2/3] Reduce default index creation verbosity by reducing log level of a few debug logs Signed-off-by: Narek Galstyan --- src/index/vchordrq/dispatch.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index/vchordrq/dispatch.rs b/src/index/vchordrq/dispatch.rs index ec4b5b51..01d70a87 100644 --- a/src/index/vchordrq/dispatch.rs +++ b/src/index/vchordrq/dispatch.rs @@ -179,15 +179,15 @@ pub fn maintain( check, ), }; - pgrx::info!( + pgrx::debug1!( "maintain: number_of_formerly_allocated_pages = {}", maintain.number_of_formerly_allocated_pages ); - pgrx::info!( + pgrx::debug1!( "maintain: number_of_freshly_allocated_pages = {}", maintain.number_of_freshly_allocated_pages ); - pgrx::info!( + pgrx::debug1!( "maintain: number_of_freed_pages = {}", maintain.number_of_freed_pages ); From 19d5b3e597f2d39a0d5c3edc9fe3b6920a28b027 Mon Sep 17 00:00:00 2001 From: Narek Galstyan Date: Tue, 24 Feb 2026 15:12:46 -0500 Subject: [PATCH 3/3] Fix sphere() functions to use explicit cast for WHPG compatibility The sphere() SQL functions were defined as 'SELECT ROW($1, $2)' which returns a generic record type. WHPG (Greenplum/PostgreSQL 12.12) is stricter about type matching in SQL function bodies and requires the return value to match the declared composite type exactly. This caused runtime errors: ERROR: return type mismatch in function declared to return sphere_vector DETAIL: Final statement returns record instead of vector at column 1. Fix by adding explicit casts: 'SELECT ROW($1, $2)::sphere_vector' Signed-off-by: Narek Galstyan --- src/sql/finalize.sql | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/sql/finalize.sql b/src/sql/finalize.sql index 39c0493a..a4f8f38a 100644 --- a/src/sql/finalize.sql +++ b/src/sql/finalize.sql @@ -189,16 +189,16 @@ CREATE OPERATOR @# ( -- List of functions CREATE FUNCTION sphere(vector, real) RETURNS sphere_vector -IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)'; +IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)::sphere_vector'; CREATE FUNCTION sphere(halfvec, real) RETURNS sphere_halfvec -IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)'; +IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)::sphere_halfvec'; CREATE FUNCTION sphere(rabitq8, real) RETURNS sphere_rabitq8 -IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)'; +IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)::sphere_rabitq8'; CREATE FUNCTION sphere(rabitq4, real) RETURNS sphere_rabitq4 -IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)'; +IMMUTABLE PARALLEL SAFE LANGUAGE sql AS 'SELECT ROW($1, $2)::sphere_rabitq4'; CREATE FUNCTION quantize_to_rabitq8(vector) RETURNS rabitq8 IMMUTABLE STRICT PARALLEL SAFE LANGUAGE c AS 'MODULE_PATHNAME', '_vchord_vector_quantize_to_rabitq8_wrapper';