postgresql/src/include/utils
Noah Misch bcb784e7d2 Assert lack of hazardous buffer locks before possible catalog read.
Commit 0bada39c83 fixed a bug of this kind,
which existed in all branches for six days before detection.  While the
probability of reaching the trouble was low, the disruption was extreme.  No
new backends could start, and service restoration needed an immediate
shutdown.  Hence, add this to catch the next bug like it.

The new check in RelationIdGetRelation() suffices to make autovacuum detect
the bug in commit 243e9b40f1 that led to commit
0bada39.  This also checks in a number of similar places.  It replaces each
Assert(IsTransactionState()) that pertained to a conditional catalog read.

Back-patch to v14 - v17.  This a back-patch of commit
f4ece891fc (from before v18 branched) to
all supported branches, to accompany the back-patch of commits 243e9b4
and 0bada39.  For catalog indexes, the bttextcmp() behavior that
motivated IsCatalogTextUniqueIndexOid() was v18-specific.  Hence, this
back-patch doesn't need that or its correction from commit
4a4ee0c2c1.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/20250410191830.0e.nmisch@google.com
Discussion: https://postgr.es/m/10ec0bc3-5933-1189-6bb8-5dec4114558e@gmail.com
Backpatch-through: 14-17
2025-12-16 16:13:54 -08:00
..
.gitignore Generate automatically code and documentation related to wait events 2023-07-05 10:53:11 +09:00
acl.h Improve tracking of role dependencies of pg_init_privs entries. 2024-06-17 12:55:10 -04:00
aclchk_internal.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
array.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
arrayaccess.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
ascii.h Move is_valid_ascii() to ascii.h. 2024-01-29 12:08:57 -06:00
attoptcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
backend_progress.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
backend_status.h Revert "Add notBefore and notAfter to SSL cert info display" 2024-03-22 22:58:41 +01:00
builtins.h Adjust populate_record_field() to handle errors softly 2024-01-24 15:04:33 +09:00
bytea.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
cash.h Convert *GetDatum() and DatumGet*() macros to inline functions 2022-09-27 20:50:21 +02:00
catcache.h For inplace update, send nontransactional invalidations. 2025-12-16 16:13:54 -08:00
combocid.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
conffiles.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
date.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
datetime.h Support TZ and OF format codes in to_timestamp(). 2024-01-25 17:47:08 -05:00
datum.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
dsa.h Allow specifying initial and maximum segment sizes for DSA. 2024-03-27 11:43:29 +09:00
dynahash.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
elog.h Fix incorrect message-printing in win32security.c. 2025-10-13 17:56:45 -04:00
evtcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
expandeddatum.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
expandedrecord.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
float.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
fmgrtab.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
formatting.h Add SQL/JSON query functions 2024-03-21 17:07:03 +09:00
freepage.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
geo_decls.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
guc.h Fix incorrect file reference in guc.h 2025-09-11 10:15:39 +09:00
guc_hooks.h Fix the handling of two GUCs during upgrade. 2025-07-11 09:53:34 +05:30
guc_tables.h Rename COMPAT_OPTIONS_CLIENT to COMPAT_OPTIONS_OTHER. 2024-03-27 10:45:28 -04:00
help_config.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
hsearch.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
index_selfuncs.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
inet.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
injection_point.h Fix using injection points at backend startup in EXEC_BACKEND mode 2024-07-26 15:12:12 +03:00
inval.h For inplace update, send nontransactional invalidations. 2025-12-16 16:13:54 -08:00
json.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
jsonb.h Add SQL/JSON query functions 2024-03-21 17:07:03 +09:00
jsonfuncs.h SQL/JSON: Always coerce JsonExpr result at runtime 2024-06-28 21:58:13 +09:00
jsonpath.h SQL/JSON: Correct jsonpath variable name matching 2024-06-19 15:22:06 +09:00
logtape.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
lsyscache.h ATTACH PARTITION: Don't match a PK with a UNIQUE constraint 2024-04-15 15:07:47 +02:00
memdebug.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
memutils.h Introduce a bump memory allocator 2024-04-08 00:02:43 +12:00
memutils_internal.h Introduce a bump memory allocator 2024-04-08 00:02:43 +12:00
memutils_memorychunk.h Enlarge bit-space for MemoryContextMethodID 2024-04-07 23:32:00 +12:00
meson.build Update copyright for 2024 2024-01-03 20:49:05 -05:00
multirangetypes.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
numeric.h Add functions to generate random numbers in a specified range. 2024-03-27 10:12:39 +00:00
palloc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
partcache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_crc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_locale.h Update ICU C++ API symbols 2025-08-07 17:13:55 +07:00
pg_lsn.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pg_rusage.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
pgstat_internal.h Fix race conditions with drop of reused pgstats entries 2024-11-15 11:32:13 +09:00
pidfile.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
plancache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
portal.h Simplify executor's determination of whether to use parallelism. 2024-12-09 14:38:19 -05:00
ps_status.h Speedup and increase usability of set proc title functions 2023-02-20 16:18:27 +13:00
queryenvironment.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
rangetypes.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
regproc.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
rel.h Revert: Allow table AM to store complex data structures in rd_amcache 2024-04-11 16:02:49 +03:00
relcache.h Assert lack of hazardous buffer locks before possible catalog read. 2025-12-16 16:13:54 -08:00
relfilenumbermap.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
relmapper.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
relptr.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
reltrigger.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
resowner.h Harmonize function parameter names for Postgres 17. 2024-06-12 17:01:51 -04:00
rls.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
ruleutils.h Revert support for ALTER TABLE ... MERGE/SPLIT PARTITION(S) commands 2024-08-24 19:18:24 +03:00
sampling.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
selfuncs.h Fix security checks in selectivity estimation functions. 2025-08-11 09:09:12 +01:00
sharedtuplestore.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
snapmgr.h Remove GlobalVisTestNonRemovable[Full]Horizon, not used anymore 2024-04-17 11:21:17 -07:00
snapshot.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
sortsupport.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
spccache.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
syscache.h For inplace update durability, make heap_update() callers wait. 2024-09-24 15:25:22 -07:00
timeout.h Introduce transaction_timeout 2024-02-15 23:56:12 +02:00
timestamp.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
tuplesort.h Harmonize function parameter names for Postgres 17. 2024-06-12 17:01:51 -04:00
tuplestore.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
typcache.h Add planner support functions for range operators <@ and @>. 2024-01-20 13:57:54 -05:00
tzparser.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
usercontext.h Perform logical replication actions as the table owner. 2023-04-04 11:25:23 -04:00
uuid.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varbit.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
varlena.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
wait_event.h Add wait event type "InjectionPoint", a custom type like "Extension". 2024-06-27 19:21:05 -07:00
xid8.h Update copyright for 2024 2024-01-03 20:49:05 -05:00
xml.h Update copyright for 2024 2024-01-03 20:49:05 -05:00