postgresql/src/include/utils
Michael Paquier b60d71c202 Fix parallel-safety check of expressions and predicate for index builds
As coded, the planner logic that calculates the number of parallel
workers to use for a parallel index build uses expressions and
predicates from the relcache, which are flattened for the planner by
eval_const_expressions().

As reported in the bug, an immutable parallel-unsafe function flattened
in the relcache would become a Const, which would be considered as
parallel-safe, even if the predicate or the expressions including the
function are not safe in parallel workers.  Depending on the expressions
or predicate used, this could cause the parallel build to fail.

Tests are included that check parallel index builds with parallel-unsafe
predicate and expressions.  Two routines are added to lsyscache.h to be
able to retrieve expressions and predicate of an index from its pg_index
data.

Reported-by: Alexander Lakhin
Author: Tender Wang
Reviewed-by: Jian He, Michael Paquier
Discussion: https://postgr.es/m/CAHewXN=UaAaNn9ruHDH3Os8kxLVmtWqbssnf=dZN_s9=evHUFA@mail.gmail.com
Backpatch-through: 12
2024-03-06 17:24:12 +09:00
..
.gitignore Revert "Add gitignore entries for jsonpath_gram.h" 2019-03-23 00:19:34 +01:00
acl.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
aclchk_internal.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
array.h Detect integer overflow while computing new array dimensions. 2023-11-06 10:56:43 -05:00
arrayaccess.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
ascii.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
attoptcache.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
builtins.h Fix ordering of XIDs in ProcArrayApplyRecoveryInfo 2022-01-27 20:16:39 +01:00
bytea.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
cash.h Phase 2 of pgindent updates. 2017-06-21 15:19:25 -04:00
catcache.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
combocid.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
date.h Prevent internal overflows in date-vs-timestamp and related comparisons. 2020-10-07 17:10:26 -04:00
datetime.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
datum.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
dsa.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
dynahash.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
elog.h Avoid calling proc_exit() in processes forked by system(). 2023-10-17 10:42:17 -05:00
evtcache.h Fix up recent breakage of headerscheck and cpluspluscheck. 2020-03-21 18:28:44 -04:00
expandeddatum.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
expandedrecord.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
float.h Avoid a performance regression in float overflow/underflow detection. 2020-02-13 13:37:43 -05:00
fmgrtab.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
formatting.h Allow to_date/to_timestamp to recognize non-English month/day names. 2020-03-03 11:06:47 -05:00
freepage.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
geo_decls.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
guc.h Improve user control over truncation of logged bind-parameter values. 2020-04-02 15:04:51 -04:00
guc_tables.h Be more wary about NULL values for GUC string variables. 2023-11-02 11:47:33 -04:00
help_config.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
hsearch.h Put all the prototypes for hashfn.c into the same header file. 2020-02-24 17:22:45 +05:30
index_selfuncs.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
inet.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
int8.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
inval.h Avoid race in RelationBuildDesc() affecting CREATE INDEX CONCURRENTLY. 2021-10-23 18:36:42 -07:00
json.h Adjust src/include/utils/jsonapi.h so it's not backend-only. 2020-01-24 09:58:37 -08:00
jsonb.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
jsonfuncs.h Move jsonapi.c and jsonapi.h to src/common. 2020-01-29 10:22:51 -05:00
jsonpath.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
logtape.h logtape.c: do not preallocate for tapes when sorting 2020-09-11 17:21:00 -07:00
lsyscache.h Fix parallel-safety check of expressions and predicate for index builds 2024-03-06 17:24:12 +09:00
memdebug.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
memutils.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
numeric.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
palloc.h Expand palloc/pg_malloc API for more type safety 2022-09-14 06:08:46 +02:00
partcache.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
pg_crc.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
pg_locale.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
pg_lsn.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
pg_rusage.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
pidfile.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
plancache.h Rearrange validity checks for plpgsql "simple" expressions. 2020-03-27 14:47:34 -04:00
portal.h Fix Portal snapshot tracking to handle subtransactions properly. 2021-10-01 11:10:12 -04:00
ps_status.h Refactor ps_status.c API 2020-03-11 16:38:31 +01:00
queryenvironment.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
rangetypes.h Initial pgindent and pgperltidy run for v13. 2020-05-14 13:06:50 -04:00
regproc.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
rel.h Make our back branches build under -fkeep-inline-functions. 2023-01-20 11:58:12 -05:00
relcache.h Avoid race in RelationBuildDesc() affecting CREATE INDEX CONCURRENTLY. 2021-10-23 18:36:42 -07:00
relfilenodemap.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
relmapper.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
relptr.h Suppress compiler warning in relptr_store(). 2022-03-26 14:29:48 -04:00
reltrigger.h Enable BEFORE row-level triggers for partitioned tables 2020-03-18 18:58:05 -03:00
resowner.h Improve performance of "simple expressions" in PL/pgSQL. 2020-03-26 18:58:57 -04:00
resowner_private.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
rls.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
ruleutils.h Implement operator class parameters 2020-03-30 19:17:23 +03:00
sampling.h Report progress of ANALYZE commands 2020-01-15 11:14:39 -03:00
selfuncs.h Improve ineq_histogram_selectivity's behavior for non-default orderings. 2020-06-05 16:55:27 -04:00
sharedtuplestore.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
snapmgr.h Fix Portal snapshot tracking to handle subtransactions properly. 2021-10-01 11:10:12 -04:00
snapshot.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
sortsupport.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
spccache.h Introduce a maintenance_io_concurrency setting. 2020-03-16 17:14:26 +13:00
syscache.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
timeout.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
timestamp.h Fix and simplify some usages of TimestampDifference(). 2020-11-10 22:51:55 -05:00
tuplesort.h Use int64 instead of long in incremental sort code 2020-08-02 14:23:57 +12:00
tuplestore.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
typcache.h Allow ALTER TYPE to change some properties of a base type. 2020-03-06 12:19:29 -05:00
tzparser.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
uuid.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
varbit.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
varlena.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00
xid8.h Add SQL type xid8 to expose FullTransactionId to users. 2020-04-07 12:03:59 +12:00
xml.h Update copyrights for 2020 2020-01-01 12:21:45 -05:00