postgresql/src/include/utils
Thomas Munro eeb68c1cdd Avoid catalog lookups in RelationAllowsEarlyPruning().
RelationAllowsEarlyPruning() performed a catalog scan, but is used
in two contexts where that was a bad idea:

1.  In heap_page_prune_opt(), which runs very frequently in some large
    scans.  This caused major performance problems in a field report
    that was easy to reproduce.

2.  In TestForOldSnapshot(), which runs while we hold a buffer content
    lock.  It's not clear if this was guaranteed to be free of buffer
    deadlock risk.

The check was introduced in commit 2cc41acd8 and defended against a
real problem: 9.6's hash indexes have no page LSN and so we can't
allow early pruning (ie the snapshot-too-old feature).  We can remove
the check from all later releases though: hash indexes are now logged,
and there is no way to create UNLOGGED indexes on regular logged
tables.

If a future release allows such a combination, it might need to put
a similar check in place, but it'll need some more thought.

Back-patch to 10.

Author: Thomas Munro
Reviewed-by: Tom Lane, who spotted the second problem
Discussion: https://postgr.es/m/CA%2BhUKGKT8oTkp5jw_U4p0S-7UG9zsvtw_M47Y285bER6a2gD%2Bg%40mail.gmail.com
Discussion: https://postgr.es/m/CAA4eK1%2BWy%2BN4eE5zPm765h68LrkWc3Biu_8rzzi%2BOYX4j%2BiHRw%40mail.gmail.com
2019-08-28 17:59:50 +12:00
..
.gitignore Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
acl.h Fix missing role dependencies for some schema and type ACLs. 2018-11-09 20:42:03 -05:00
aclchk_internal.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
array.h Don't read fields of a misaligned ExpandedObjectHeader or AnyArrayType. 2019-06-30 17:34:20 -07:00
arrayaccess.h Don't read fields of a misaligned ExpandedObjectHeader or AnyArrayType. 2019-06-30 17:34:20 -07:00
ascii.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
attoptcache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
backend_random.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
builtins.h Fix some corner-case issues in REFRESH MATERIALIZED VIEW CONCURRENTLY. 2018-03-19 18:49:53 -04:00
bytea.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
cash.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
catcache.h Remove AtEOXact_CatCache(). 2017-08-13 16:15:14 -04:00
combocid.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
date.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
datetime.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
datum.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
dsa.h Use size_t consistently in dsa.{ch}. 2018-09-22 00:42:17 +12:00
dynahash.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
dynamic_loader.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
elog.h Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
evtcache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
expandeddatum.h Don't read fields of a misaligned ExpandedObjectHeader or AnyArrayType. 2019-06-30 17:34:20 -07:00
fmgrtab.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
formatting.h Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
freepage.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
geo_decls.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
guc.h Teach SHOW ALL to honor pg_read_all_settings membership 2018-06-08 16:27:56 -04:00
guc_tables.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
hashutils.h Backport: Add inline murmurhash32(uint32) function. 2018-01-29 11:24:57 -08:00
help_config.h Update copyright via script for 2017 2017-01-03 13:48:53 -05:00
hsearch.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
index_selfuncs.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
inet.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
int8.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
inval.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
json.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
jsonapi.h Phase 3 of pgindent updates. 2017-06-21 15:35:54 -04:00
jsonb.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
logtape.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
lsyscache.h Fix assorted bugs in pg_get_partition_constraintdef(). 2018-09-27 18:15:06 -04:00
memdebug.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
memutils.h Ensure SIZE_MAX can be used throughout our code. 2017-09-01 13:52:53 -04:00
nabstime.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
numeric.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
palloc.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_crc.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_locale.h Reject use of ucol_strcollUTF8() before ICU 53 2017-08-10 22:14:00 -04:00
pg_lsn.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pg_rusage.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
pidfile.h Change pg_ctl to detect server-ready by watching status in postmaster.pid. 2017-06-28 17:31:32 -04:00
plancache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
portal.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
ps_status.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
queryenvironment.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
rangetypes.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
regproc.h Post-PG 10 beta1 pgindent run 2017-05-17 16:31:56 -04:00
rel.h Avoid catalog lookups in RelationAllowsEarlyPruning(). 2019-08-28 17:59:50 +12:00
relcache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
relfilenodemap.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
relmapper.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
relptr.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
reltrigger.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
resowner.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
resowner_private.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
rls.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
ruleutils.h Improve the error message when creating an empty range partition. 2017-08-10 13:46:56 -04:00
sampling.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
selfuncs.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
snapmgr.h Avoid catalog lookups in RelationAllowsEarlyPruning(). 2019-08-28 17:59:50 +12:00
snapshot.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
sortsupport.h Allow btree comparison functions to return INT_MIN. 2018-10-05 16:01:29 -04:00
spccache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
syscache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
timeout.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
timestamp.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
tqual.h Fix low-probability loss of NOTIFY messages due to XID wraparound. 2017-10-11 14:28:33 -04:00
tuplesort.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
tuplestore.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
typcache.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
tzparser.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
uuid.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
varbit.h Generate fmgr prototypes automatically 2017-01-17 14:06:07 -05:00
varlena.h Further fixes for quoted-list GUC values in pg_dump and ruleutils.c. 2018-07-31 13:00:08 -04:00
xml.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00