Fix GiST index deletion assert issue.
Avoid calling heap_index_delete_tuples() with an empty deltids array to avoid an assertion failure. This issue was arguably an oversight in commitb5f58cf2
, though the failing assert itself was added by my recent commitd168b666
. No backpatch, though, since the oversight is harmless in the back branches. Author: Peter Geoghegan <pg@bowt.ie> Reported-By: Jaime Casanova <jcasanov@systemguards.com.ec> Discussion: https://postgr.es/m/CAJKUy5jscES84n3puE=sYngyF+zpb4wv8UMtuLnLPv5z=6yyNw@mail.gmail.com
This commit is contained in:
parent
32bef75829
commit
e42b3c3bd6
|
@ -1645,7 +1645,6 @@ gistprunepage(Relation rel, Page page, Buffer buffer, Relation heapRel)
|
|||
int ndeletable = 0;
|
||||
OffsetNumber offnum,
|
||||
maxoff;
|
||||
TransactionId latestRemovedXid = InvalidTransactionId;
|
||||
|
||||
Assert(GistPageIsLeaf(page));
|
||||
|
||||
|
@ -1664,13 +1663,15 @@ gistprunepage(Relation rel, Page page, Buffer buffer, Relation heapRel)
|
|||
deletable[ndeletable++] = offnum;
|
||||
}
|
||||
|
||||
if (XLogStandbyInfoActive() && RelationNeedsWAL(rel))
|
||||
latestRemovedXid =
|
||||
index_compute_xid_horizon_for_tuples(rel, heapRel, buffer,
|
||||
deletable, ndeletable);
|
||||
|
||||
if (ndeletable > 0)
|
||||
{
|
||||
TransactionId latestRemovedXid = InvalidTransactionId;
|
||||
|
||||
if (XLogStandbyInfoActive() && RelationNeedsWAL(rel))
|
||||
latestRemovedXid =
|
||||
index_compute_xid_horizon_for_tuples(rel, heapRel, buffer,
|
||||
deletable, ndeletable);
|
||||
|
||||
START_CRIT_SECTION();
|
||||
|
||||
PageIndexMultiDelete(page, deletable, ndeletable);
|
||||
|
|
|
@ -301,6 +301,8 @@ index_compute_xid_horizon_for_tuples(Relation irel,
|
|||
Page ipage = BufferGetPage(ibuf);
|
||||
IndexTuple itup;
|
||||
|
||||
Assert(nitems > 0);
|
||||
|
||||
delstate.bottomup = false;
|
||||
delstate.bottomupfreespace = 0;
|
||||
delstate.ndeltids = 0;
|
||||
|
|
Loading…
Reference in New Issue