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;
|
int ndeletable = 0;
|
||||||
OffsetNumber offnum,
|
OffsetNumber offnum,
|
||||||
maxoff;
|
maxoff;
|
||||||
TransactionId latestRemovedXid = InvalidTransactionId;
|
|
||||||
|
|
||||||
Assert(GistPageIsLeaf(page));
|
Assert(GistPageIsLeaf(page));
|
||||||
|
|
||||||
|
@ -1664,13 +1663,15 @@ gistprunepage(Relation rel, Page page, Buffer buffer, Relation heapRel)
|
||||||
deletable[ndeletable++] = offnum;
|
deletable[ndeletable++] = offnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (XLogStandbyInfoActive() && RelationNeedsWAL(rel))
|
|
||||||
latestRemovedXid =
|
|
||||||
index_compute_xid_horizon_for_tuples(rel, heapRel, buffer,
|
|
||||||
deletable, ndeletable);
|
|
||||||
|
|
||||||
if (ndeletable > 0)
|
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();
|
START_CRIT_SECTION();
|
||||||
|
|
||||||
PageIndexMultiDelete(page, deletable, ndeletable);
|
PageIndexMultiDelete(page, deletable, ndeletable);
|
||||||
|
|
|
@ -301,6 +301,8 @@ index_compute_xid_horizon_for_tuples(Relation irel,
|
||||||
Page ipage = BufferGetPage(ibuf);
|
Page ipage = BufferGetPage(ibuf);
|
||||||
IndexTuple itup;
|
IndexTuple itup;
|
||||||
|
|
||||||
|
Assert(nitems > 0);
|
||||||
|
|
||||||
delstate.bottomup = false;
|
delstate.bottomup = false;
|
||||||
delstate.bottomupfreespace = 0;
|
delstate.bottomupfreespace = 0;
|
||||||
delstate.ndeltids = 0;
|
delstate.ndeltids = 0;
|
||||||
|
|
Loading…
Reference in New Issue