diff options
author | Andres Freund <andres@anarazel.de> | 2019-04-22 14:28:30 -0700 |
---|---|---|
committer | Andres Freund <andres@anarazel.de> | 2019-04-22 14:28:30 -0700 |
commit | b5f58cf213bdab7e726f7b09c1137b4ea397fc0b (patch) | |
tree | c0c01cb5a8ad7baa64e5ada9515de704c3f434de /src/backend/access/gist/gist.c | |
parent | b804c1837b55722369d30be707738c098a75cd7a (diff) | |
download | postgresql-b5f58cf213bdab7e726f7b09c1137b4ea397fc0b.tar.gz postgresql-b5f58cf213bdab7e726f7b09c1137b4ea397fc0b.zip |
Convert gist to compute page level xid horizon on primary.
Due to parallel development, gist added the missing conflict
information in c952eae52a3, while 558a9165e08 moved that computation
to the primary for the index types that already had it. Thus adapt
gist to also compute on the primary, using
index_compute_xid_horizon_for_tuples() instead of its own copy of the
logic.
This also adds pg_waldump support for XLOG_GIST_DELETE records, which
previously was not properly present.
Bumps WAL version.
Author: Andres Freund
Discussion: https://postgr.es/m/20190406050243.bszosdg4buvabfrt@alap3.anarazel.de
Diffstat (limited to 'src/backend/access/gist/gist.c')
-rw-r--r-- | src/backend/access/gist/gist.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 2db790c840c..769aca42e3b 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -1616,6 +1616,7 @@ gistprunepage(Relation rel, Page page, Buffer buffer, Relation heapRel) int ndeletable = 0; OffsetNumber offnum, maxoff; + TransactionId latestRemovedXid = InvalidTransactionId; Assert(GistPageIsLeaf(page)); @@ -1634,6 +1635,11 @@ 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) { START_CRIT_SECTION(); @@ -1658,7 +1664,7 @@ gistprunepage(Relation rel, Page page, Buffer buffer, Relation heapRel) recptr = gistXLogDelete(buffer, deletable, ndeletable, - heapRel->rd_node); + latestRemovedXid); PageSetLSN(page, recptr); } |