mirror of
https://github.com/postgres/postgres.git
synced 2025-04-27 22:56:53 +03:00
Fix more hash index bugs around marking buffers dirty.
In _hash_freeovflpage(), if we're freeing the overflow page that immediate follows the page to which tuples are being moved (the confusingly-named "write buffer"), don't forget to mark that page dirty after updating its hasho_nextblkno. In _hash_squeezebucket(), it's not necessary to mark the primary bucket page dirty if there are no overflow pages, because there's nothing to squeeze in that case. Amit Kapila, with help from Kuntal Ghosh and Dilip Kumar, after an initial trouble report by Jeff Janes.
This commit is contained in:
parent
25216c9893
commit
6a4fe1127c
@ -452,6 +452,11 @@ _hash_freeovflpage(Relation rel, Buffer ovflbuf, Buffer wbuf,
|
||||
MarkBufferDirty(prevbuf);
|
||||
_hash_relbuf(rel, prevbuf);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* ensure to mark prevbuf as dirty */
|
||||
wbuf_dirty = true;
|
||||
}
|
||||
}
|
||||
|
||||
/* write and unlock the write buffer */
|
||||
@ -643,7 +648,7 @@ _hash_squeezebucket(Relation rel,
|
||||
*/
|
||||
if (!BlockNumberIsValid(wopaque->hasho_nextblkno))
|
||||
{
|
||||
_hash_chgbufaccess(rel, wbuf, HASH_WRITE, HASH_NOLOCK);
|
||||
_hash_chgbufaccess(rel, wbuf, HASH_READ, HASH_NOLOCK);
|
||||
return;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user