postgresql/src/include/access
Alexander Korotkov ad6ebcfcbb Prevent GIN deleted pages from being reclaimed too early
When GIN vacuum deletes a posting tree page, it assumes that no concurrent
searchers can access it, thanks to ginStepRight() locking two pages at once.
However, since 9.4 searches can skip parts of posting trees descending from the
root.  That leads to the risk that page is deleted and reclaimed before
concurrent search can access it.

This commit prevents the risk of above by waiting for every transaction, which
might wait to reference this page, to finish.  Due to binary compatibility
we can't change GinPageOpaqueData to store corresponding transaction id.
Instead we reuse page header pd_prune_xid field, which is unused in index pages.

Discussion: https://postgr.es/m/31a702a.14dd.166c1366ac1.Coremail.chjischj%40163.com
Author: Andrey Borodin, Alexander Korotkov
Reviewed-by: Alexander Korotkov
Backpatch-through: 9.4
2018-12-13 06:52:33 +03:00
..
attnum.h Fix various typos and grammar errors in comments. 2015-04-26 18:42:31 +02:00
brin.h Fix BRIN to use SnapshotAny during summarization 2015-08-05 16:20:50 -03:00
brin_internal.h Add BRIN infrastructure for "inclusion" opclasses 2015-05-15 18:05:22 -03:00
brin_page.h Close some holes in BRIN page assignment 2015-08-12 14:20:38 -03:00
brin_pageops.h Close some holes in BRIN page assignment 2015-08-12 14:20:38 -03:00
brin_revmap.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
brin_tuple.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
brin_xlog.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
clog.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
commit_ts.h Rename (new|old)estCommitTs to (new|old)estCommitTsXid 2015-12-28 12:35:16 -08:00
genam.h More fixes for lossy-GiST-distance-functions patch. 2015-05-21 19:47:48 -04:00
gin.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
gin_private.h Prevent GIN deleted pages from being reclaimed too early 2018-12-13 06:52:33 +03:00
gist.h Move strategy numbers to include/access/stratnum.h 2015-05-15 17:03:16 -03:00
gist_private.h Fix outdated comments, GIST search queue is not an RBTree anymore. 2016-09-20 11:40:20 +03:00
gistscan.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
hash.h Fix building of large (bigger than shared_buffers) hash indexes. 2016-06-24 16:57:36 -04:00
heapam.h Fix logical decoding error when system table w/ toast is repeatedly rewritten. 2018-10-10 13:53:03 -07:00
heapam_xlog.h Perform a lot more sanity checks when freezing tuples. 2017-12-14 18:20:48 -08:00
hio.h Add support for INSERT ... ON CONFLICT DO NOTHING/UPDATE. 2015-05-08 05:43:10 +02:00
htup.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
htup_details.h Change some test macros to return true booleans 2017-01-18 18:06:13 -03:00
itup.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
multixact.h Remove legacy multixact truncation support. 2015-09-26 19:04:25 +02:00
nbtree.h Allow btree comparison functions to return INT_MIN. 2018-10-05 16:01:30 -04:00
parallel.h Don't use bgw_main even to specify in-core bgworker entrypoints. 2017-03-31 20:50:31 -04:00
printtup.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
reloptions.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
relscan.h Fix some oversights in BRIN patch. 2015-07-21 13:38:24 -04:00
rewriteheap.h Collection of typo fixes. 2015-05-20 16:56:22 +03:00
rmgr.h Add rmgr callback to name xlog record types for display purposes. 2014-09-19 16:20:29 +02:00
rmgrlist.h Collection of typo fixes. 2015-05-20 16:56:22 +03:00
sdir.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
skey.h Move strategy numbers to include/access/stratnum.h 2015-05-15 17:03:16 -03:00
slru.h Rework the way multixact truncations work. 2015-09-26 19:04:25 +02:00
spgist.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
spgist_private.h Don't assume that 'char' is signed. 2015-07-27 21:51:49 +03:00
stratnum.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
subtrans.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
sysattr.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
timeline.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
transam.h Rename (new|old)estCommitTs to (new|old)estCommitTsXid 2015-12-28 12:35:16 -08:00
tsmapi.h Redesign tablesample method API, and do extensive code review. 2015-07-25 14:39:00 -04:00
tupconvert.h Fix ALTER TABLE / SET TYPE for irregular inheritance 2017-01-09 19:26:58 -03:00
tupdesc.h Backpatch introduction of TupleDescAttr(tupdesc, i). 2017-08-22 07:47:46 -07:00
tupmacs.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
tuptoaster.h Fix deletion of speculatively inserted TOAST on conflict 2016-08-17 17:03:36 -07:00
twophase.h Mark assorted variables PGDLLIMPORT. 2017-12-05 09:30:57 -05:00
twophase_rmgr.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
valid.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
visibilitymap.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
xact.h Propagate xactStartTimestamp and stmtStartTimestamp to parallel workers. 2018-10-06 12:00:10 -04:00
xlog.h Remove files signaling a standby promotion request at postmaster startup 2015-09-09 22:52:28 +09:00
xlog_fn.h Update copyright for 2015 2015-01-06 11:43:47 -05:00
xlog_internal.h Fix comment. 2017-08-01 08:08:47 +09:00
xlogdefs.h Introduce replication progress tracking infrastructure. 2015-04-29 19:30:53 +02:00
xloginsert.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
xlogreader.h Fix scenario where streaming standby gets stuck at a continuation record. 2018-05-05 01:35:15 +03:00
xlogrecord.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00
xlogutils.h pgindent run for 9.5 2015-05-23 21:35:49 -04:00