Hello! Currently PostgreSQL built on 64-bit Windows has 2Gb limit for GUC variables due to sizeof(long)==4 used by Windows compilers. Technically 64-bit addressing for maintenance_work_mem is possible, but code base historically uses variables and constants of type "long", when process maintenance_work_mem value. Modern vector indexes like pgvector or pgvectorscale require as much as possible maintenance_work_mem, 2 Gb limit dramatically decrease build index performace making impossible to build indexes for large datasets. The proposed patch fixes all appearences of "long" variables and constants that can affect maintenance_work_mem (hash index, vacuum, planner only affected, gin, gist, brin, bloom, btree indexes process value correctly). Constant MAX_SIZE_T_KILOBYTES added as upper limit for GUC variables that depend on size_t only (currently only maintenance_work_mem). Other GUC variables could use this constant after fixing "long" type dependence. This patch tested on a) Windows 10 64-bit AMD64, compiled by msvc-19.37.32822 b) linux gcc (Debian 12.2.0-14) AMD64 All tests are passed.
Best regards Vladlen Popolitov postgrespro.com
v1-0001-maintenance_work_mem-limit-increased-in-64-bit-Wi.patch
Description: Binary data