-- Copyright (C) 2026 Intel Corporation -- SPDX-License-Identifier: PostgreSQL -- Enable this database and wait for its worker before any index work, so this -- file runs standalone. Enrollment reserves the slot synchronously (the gate -- then passes), but the worker spawns asynchronously; the first INSERT would -- otherwise race its cold start and time out. Idempotent and a no-op in the -- full suite, where vamana_databases.sql (ordered first) has already warmed it. INSERT INTO vamana_databases (datname, enabled) VALUES (current_database(), true) ON CONFLICT (datname) DO NOTHING; DO $$ BEGIN FOR i IN 1 .. 300 LOOP PERFORM 1 FROM pg_stat_vamana_worker WHERE db_oid = (SELECT oid FROM pg_database WHERE datname = current_database()) AND worker_state = 'running'; EXIT WHEN FOUND; PERFORM pg_sleep(0.1); END LOOP; END $$; SET enable_seqscan = off; SHOW svs.search_window_size; svs.search_window_size ------------------------ 100 (1 row) -- compression invalid parameters CREATE TABLE t (id serial PRIMARY KEY, val vector(3)); CREATE INDEX ON t USING vamana (val vector_l2_ops) WITH (compression_type = 3); ERROR: value 3 out of bounds for option "compression_type" DETAIL: Valid values are between "0" and "2". CREATE INDEX ON t USING vamana (val vector_l2_ops) WITH (compression_primary = 16); ERROR: value 16 out of bounds for option "compression_primary" DETAIL: Valid values are between "-8" and "8". DROP TABLE t; -- search_window_size forwarding to SVS -- Verify that the GUC value is actually forwarded to svs_index_search() at query -- time. Build a dataset large enough that search_window_size has a -- meaningful effect, then query with the minimum and a large value and confirm -- both return the expected nearest neighbors. CREATE TABLE t (id int, val vector(3)); INSERT INTO t SELECT i, array_fill(i, ARRAY[3])::vector(3) FROM generate_series(1, 50) i; CREATE INDEX ON t USING vamana (val vector_l2_ops); NOTICE: buffered 50 vectors for SVS index build NOTICE: building SVS index with 50 vectors of dimension 3 NOTICE: SVS index built successfully -- Both should return non-empty results; COUNT must equal k. SET svs.search_window_size = 10; SELECT COUNT(*) FROM (SELECT id FROM t ORDER BY val <-> '[25,25,25]' LIMIT 5) sub; count ------- 5 (1 row) SET svs.search_window_size = 500; SELECT COUNT(*) FROM (SELECT id FROM t ORDER BY val <-> '[25,25,25]' LIMIT 5) sub; count ------- 5 (1 row) -- Nearest neighbor should be id=25 at both extremes. SET svs.search_window_size = 10; SELECT id FROM t ORDER BY val <-> '[25,25,25]' LIMIT 1; id ---- 25 (1 row) SET svs.search_window_size = 500; SELECT id FROM t ORDER BY val <-> '[25,25,25]' LIMIT 1; id ---- 25 (1 row) RESET svs.search_window_size; DROP TABLE t; -- max_parallel_maintenance_workers does not limit search -- The build thread count (governed by this GUC) must be decoupled from the -- search thread count. Setting it to 1 must not prevent correct search results. SET max_parallel_maintenance_workers = 1; CREATE TABLE t (id serial PRIMARY KEY, val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'); CREATE INDEX ON t USING vamana (val vector_l2_ops); NOTICE: buffered 3 vectors for SVS index build NOTICE: building SVS index with 3 vectors of dimension 3 NOTICE: SVS index built successfully SELECT * FROM t ORDER BY val <-> '[3,3,3]', id; id | val ----+--------- 2 | [1,2,3] 3 | [1,1,1] 1 | [0,0,0] (3 rows) DROP TABLE t; RESET max_parallel_maintenance_workers; -- svs.search_num_threads GUC controls search thread count -- 0 = auto (resolves to 1); explicit value overrides auto. -- Correctness must be preserved regardless of thread count. PGC_SIGHUP: -- no session SET, so exercised via ALTER SYSTEM + reload. ALTER SYSTEM SET svs.search_num_threads = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) CREATE TABLE t (id serial PRIMARY KEY, val vector(3)); INSERT INTO t (val) VALUES ('[0,0,0]'), ('[1,2,3]'), ('[1,1,1]'); CREATE INDEX ON t USING vamana (val vector_l2_ops); NOTICE: buffered 3 vectors for SVS index build NOTICE: building SVS index with 3 vectors of dimension 3 NOTICE: SVS index built successfully SELECT * FROM t ORDER BY val <-> '[3,3,3]', id; id | val ----+--------- 2 | [1,2,3] 3 | [1,1,1] 1 | [0,0,0] (3 rows) ALTER SYSTEM RESET svs.search_num_threads; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) DROP TABLE t; -- svs.search_window_size GUC bounds: [10, 10000] -- Exact minimum is accepted SET svs.search_window_size = 10; SHOW svs.search_window_size; svs.search_window_size ------------------------ 10 (1 row) RESET svs.search_window_size; -- Exact maximum is accepted SET svs.search_window_size = 10000; SHOW svs.search_window_size; svs.search_window_size ------------------------ 10000 (1 row) RESET svs.search_window_size; -- One below minimum is rejected SET svs.search_window_size = 9; ERROR: 9 is outside the valid range for parameter "svs.search_window_size" (10 .. 10000) -- One above maximum is rejected SET svs.search_window_size = 10001; ERROR: 10001 is outside the valid range for parameter "svs.search_window_size" (10 .. 10000) -- svs.search_num_threads GUC bounds: [0, 1024] -- PGC_SIGHUP: SET always errors "cannot be changed now", so bounds are -- exercised via ALTER SYSTEM instead, same as the checkpoint GUCs below. -- Exact minimum is accepted ALTER SYSTEM SET svs.search_num_threads = 0; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.search_num_threads; svs.search_num_threads ------------------------ 0 (1 row) ALTER SYSTEM RESET svs.search_num_threads; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Exact maximum is accepted ALTER SYSTEM SET svs.search_num_threads = 1024; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.search_num_threads; svs.search_num_threads ------------------------ 1024 (1 row) ALTER SYSTEM RESET svs.search_num_threads; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- One above maximum is rejected ALTER SYSTEM SET svs.search_num_threads = 1025; ERROR: 1025 is outside the valid range for parameter "svs.search_num_threads" (0 .. 1024) -- One below minimum is rejected ALTER SYSTEM SET svs.search_num_threads = -1; ERROR: -1 is outside the valid range for parameter "svs.search_num_threads" (0 .. 1024) -- svs.checkpoint_debounce_window: [0, 86400] s -- Out-of-range: rejected at ALTER SYSTEM time ALTER SYSTEM SET svs.checkpoint_debounce_window = -1; ERROR: -1 s is outside the valid range for parameter "svs.checkpoint_debounce_window" (0 s .. 86400 s) ALTER SYSTEM SET svs.checkpoint_debounce_window = 86401; ERROR: 86401 s is outside the valid range for parameter "svs.checkpoint_debounce_window" (0 s .. 86400 s) -- Valid lower boundary ALTER SYSTEM SET svs.checkpoint_debounce_window = 0; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_debounce_window; svs.checkpoint_debounce_window -------------------------------- 0 (1 row) ALTER SYSTEM RESET svs.checkpoint_debounce_window; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Valid upper boundary ALTER SYSTEM SET svs.checkpoint_debounce_window = 86400; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_debounce_window; svs.checkpoint_debounce_window -------------------------------- 1d (1 row) ALTER SYSTEM RESET svs.checkpoint_debounce_window; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- svs.checkpoint_max_interval: [1, 86400] s -- Out-of-range ALTER SYSTEM SET svs.checkpoint_max_interval = 0; ERROR: 0 s is outside the valid range for parameter "svs.checkpoint_max_interval" (1 s .. 86400 s) ALTER SYSTEM SET svs.checkpoint_max_interval = 86401; ERROR: 86401 s is outside the valid range for parameter "svs.checkpoint_max_interval" (1 s .. 86400 s) -- Valid lower boundary ALTER SYSTEM SET svs.checkpoint_max_interval = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_max_interval; svs.checkpoint_max_interval ----------------------------- 1s (1 row) ALTER SYSTEM RESET svs.checkpoint_max_interval; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Valid upper boundary ALTER SYSTEM SET svs.checkpoint_max_interval = 86400; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_max_interval; svs.checkpoint_max_interval ----------------------------- 1d (1 row) ALTER SYSTEM RESET svs.checkpoint_max_interval; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- svs.checkpoint_min_ops: [0, INT_MAX] -- Out-of-range (below min) ALTER SYSTEM SET svs.checkpoint_min_ops = -1; ERROR: -1 is outside the valid range for parameter "svs.checkpoint_min_ops" (0 .. 2147483647) -- Valid lower boundary ALTER SYSTEM SET svs.checkpoint_min_ops = 0; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_min_ops; svs.checkpoint_min_ops ------------------------ 0 (1 row) ALTER SYSTEM RESET svs.checkpoint_min_ops; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Valid upper boundary ALTER SYSTEM SET svs.checkpoint_min_ops = 2147483647; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_min_ops; svs.checkpoint_min_ops ------------------------ 2147483647 (1 row) ALTER SYSTEM RESET svs.checkpoint_min_ops; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- svs.max_slot_wal_size: [64, MAX_KILOBYTES] MB -- Out-of-range (below min) ALTER SYSTEM SET svs.max_slot_wal_size = '63MB'; ERROR: 63 MB is outside the valid range for parameter "svs.max_slot_wal_size" (64 MB .. 2147483647 MB) -- Valid lower boundary ALTER SYSTEM SET svs.max_slot_wal_size = '64MB'; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_slot_wal_size; svs.max_slot_wal_size ----------------------- 64MB (1 row) ALTER SYSTEM RESET svs.max_slot_wal_size; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- svs.checkpoint_operations: [-1, INT_MAX] -- Out-of-range (below min) ALTER SYSTEM SET svs.checkpoint_operations = -2; ERROR: -2 is outside the valid range for parameter "svs.checkpoint_operations" (-1 .. 2147483647) -- Valid lower boundary ALTER SYSTEM SET svs.checkpoint_operations = -1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_operations; svs.checkpoint_operations --------------------------- -1 (1 row) ALTER SYSTEM RESET svs.checkpoint_operations; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Valid mid-range ALTER SYSTEM SET svs.checkpoint_operations = 0; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_operations; svs.checkpoint_operations --------------------------- 0 (1 row) ALTER SYSTEM RESET svs.checkpoint_operations; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- svs.max_build_memory / svs.max_residency_memory / svs.default_residency_memory / -- svs.max_search_work_mem / svs.default_search_work_mem: all [1, INT_MAX] MB, -- default 100MB, PGC_SIGHUP. Always finite: no "0 means unlimited" path. -- -- Asserted against pg_settings.boot_val, not SHOW: SHOW reflects whatever -- this cluster's postgresql.conf currently sets, while boot_val is the -- compiled-in default and stays fixed regardless of that override. SELECT name, boot_val, unit FROM pg_settings WHERE name IN ('svs.max_build_memory', 'svs.max_residency_memory', 'svs.default_residency_memory', 'svs.max_search_work_mem', 'svs.default_search_work_mem') ORDER BY name; name | boot_val | unit ------------------------------+----------+------ svs.default_residency_memory | 100 | MB svs.default_search_work_mem | 100 | MB svs.max_build_memory | 4096 | MB svs.max_residency_memory | 100 | MB svs.max_search_work_mem | 100 | MB (5 rows) -- Out-of-range (below min): rejected at ALTER SYSTEM time ALTER SYSTEM SET svs.max_build_memory = 0; ERROR: 0 MB is outside the valid range for parameter "svs.max_build_memory" (1 MB .. 2147483647 MB) ALTER SYSTEM SET svs.max_residency_memory = 0; ERROR: 0 MB is outside the valid range for parameter "svs.max_residency_memory" (1 MB .. 2147483647 MB) ALTER SYSTEM SET svs.default_residency_memory = 0; ERROR: 0 MB is outside the valid range for parameter "svs.default_residency_memory" (1 MB .. 2147483647 MB) ALTER SYSTEM SET svs.max_search_work_mem = 0; ERROR: 0 MB is outside the valid range for parameter "svs.max_search_work_mem" (1 MB .. 2147483647 MB) ALTER SYSTEM SET svs.default_search_work_mem = 0; ERROR: 0 MB is outside the valid range for parameter "svs.default_search_work_mem" (1 MB .. 2147483647 MB) ALTER SYSTEM SET svs.max_build_memory = -1; ERROR: -1 MB is outside the valid range for parameter "svs.max_build_memory" (1 MB .. 2147483647 MB) -- Valid lower boundary, each GUC ALTER SYSTEM SET svs.max_build_memory = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_build_memory; svs.max_build_memory ---------------------- 1MB (1 row) ALTER SYSTEM RESET svs.max_build_memory; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.max_residency_memory = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_residency_memory; svs.max_residency_memory -------------------------- 1MB (1 row) ALTER SYSTEM RESET svs.max_residency_memory; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.default_residency_memory = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.default_residency_memory; svs.default_residency_memory ------------------------------ 1MB (1 row) ALTER SYSTEM RESET svs.default_residency_memory; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.max_search_work_mem = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_search_work_mem; svs.max_search_work_mem ------------------------- 1MB (1 row) ALTER SYSTEM RESET svs.max_search_work_mem; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.default_search_work_mem = 1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.default_search_work_mem; svs.default_search_work_mem ----------------------------- 1MB (1 row) ALTER SYSTEM RESET svs.default_search_work_mem; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Valid upper boundary, each GUC ALTER SYSTEM SET svs.max_build_memory = 2147483647; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_build_memory; svs.max_build_memory ---------------------- 2147483647MB (1 row) ALTER SYSTEM RESET svs.max_build_memory; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.max_residency_memory = 2147483647; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_residency_memory; svs.max_residency_memory -------------------------- 2147483647MB (1 row) ALTER SYSTEM RESET svs.max_residency_memory; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.default_residency_memory = 2147483647; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.default_residency_memory; svs.default_residency_memory ------------------------------ 2147483647MB (1 row) ALTER SYSTEM RESET svs.default_residency_memory; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.max_search_work_mem = 2147483647; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.max_search_work_mem; svs.max_search_work_mem ------------------------- 2147483647MB (1 row) ALTER SYSTEM RESET svs.max_search_work_mem; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) ALTER SYSTEM SET svs.default_search_work_mem = 2147483647; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.default_search_work_mem; svs.default_search_work_mem ----------------------------- 2147483647MB (1 row) ALTER SYSTEM RESET svs.default_search_work_mem; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- svs.checkpoint_interval: [-1, 86400] s -- Out-of-range ALTER SYSTEM SET svs.checkpoint_interval = -2; ERROR: -2 s is outside the valid range for parameter "svs.checkpoint_interval" (-1 s .. 86400 s) ALTER SYSTEM SET svs.checkpoint_interval = 86401; ERROR: 86401 s is outside the valid range for parameter "svs.checkpoint_interval" (-1 s .. 86400 s) -- Valid lower boundary ALTER SYSTEM SET svs.checkpoint_interval = -1; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_interval; svs.checkpoint_interval ------------------------- -1 (1 row) ALTER SYSTEM RESET svs.checkpoint_interval; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) -- Valid upper boundary ALTER SYSTEM SET svs.checkpoint_interval = 86400; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row) SELECT pg_sleep(0.1); pg_sleep ---------- (1 row) SHOW svs.checkpoint_interval; svs.checkpoint_interval ------------------------- 1d (1 row) ALTER SYSTEM RESET svs.checkpoint_interval; SELECT pg_reload_conf(); pg_reload_conf ---------------- t (1 row)