Fix a serious bug introduced into GIN in 8.4: now that MergeItemPointers()
authorTom Lane <[email protected]>
Sat, 6 Jun 2009 02:39:40 +0000 (02:39 +0000)
committerTom Lane <[email protected]>
Sat, 6 Jun 2009 02:39:40 +0000 (02:39 +0000)
commit7899bf60120776c7ce59d6bfa0e76a0b899c4d4d
tree729462b9f95f59fe14299f5bcb2bf27553073a88
parent15d78e9df0133fbe6cb9ea36696c2579dcc1fd19
Fix a serious bug introduced into GIN in 8.4: now that MergeItemPointers()
is supposed to remove duplicate heap TIDs, we have to be sure to reduce the
tuple size and posting-item count accordingly in addItemPointersToTuple().
Failing to do so resulted in the effective injection of garbage TIDs into the
index contents, ie, whatever happened to be in the memory palloc'd for the
new tuple.  I'm not sure that this fully explains the index corruption
reported by Tatsuo Ishii, but the test case I'm using no longer fails.
src/backend/access/gin/gindatapage.c
src/backend/access/gin/ginentrypage.c
src/backend/access/gin/gininsert.c
src/include/access/gin.h