SP-GiST has a bug during creation:
% create table ranges as select int4range( (random()*5)::int,
(random()*5)::int+5) as range
from generate_series(1,1000000) x;% create index ranges_range_spgist_idx on ranges using spgist(range); ERROR: unexpected spgdoinsert() failure Bug is discovered by Jonathan S. Katz <[email protected]>When it was found deadlock possibility it was fixed by using ConditionalLockBuffer() instead of LockBuffer(EXCLUSIVE) and retrying insertion from the scratch. Build index method doesn't believe in concurrent access and throws an error if ConditionalLockBuffer() fails. But I missed that checkpointer process could take a share lock on buffer to write it on disk.
Attached patch just intoduces retrying during index creation. -- Teodor Sigaev E-mail: [email protected] WWW: http://www.sigaev.ru/
spgist_build.patch.gz
Description: Unix tar archive
-- Sent via pgsql-hackers mailing list ([email protected]) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers
