Hi all,
I noticed that configuring Postgres with a BLCKSZ smaller than default
was causing 'make check' give an interesting error on git head. You
should be able to see this with a simple:
./configure --enable-debug --enable-cassert --with-blocksize=4 &&
make check
which, among a few other seemingly-minor sorting and EXPLAIN
differences, gives this nasty regression (for a 64-bit binary, built
on OS X 10.6):
--- /media/src/OSS/postgresql/src/test/regress/results/create_index.out 2012-06-25
18:49:00.000000000 -0700
***************
*** 79,84 ****
--- 79,85 ----
INSERT INTO suffix_text_tbl VALUES ('P0123456789abcde');
INSERT INTO suffix_text_tbl VALUES ('P0123456789abcdefF');
CREATE INDEX sp_suff_ind ON suffix_text_tbl USING spgist (t);
+ ERROR: invalid memory alloc request size 18446744073709551520
--
-- Test GiST and SP-GiST indexes
--
Or, for a similar 32-bit build on a Debian machine, I get:
+ ERROR: invalid memory alloc request size 4294967200
I believe this problem stems from this definition in spgtextproc.c:
#define SPGIST_MAX_PREFIX_LENGTH (BLCKSZ - 256 * 16 - 100)
With a BLCKSZ of 4096, that comes to -100, which gets picked up here:
commonLen = Min(commonLen, SPGIST_MAX_PREFIX_LENGTH);
and ultimately palloc'ed as a size. I'm not sure what'd be the right
way to fix this after reading the comment above
SPGIST_MAX_PREFIX_LENGTH, but thought I'd share.
Josh