From c5be48f092016b1caf597b2e21d588b56c88a23e Mon Sep 17 00:00:00 2001 From: Amit Kapila Date: Sat, 13 Mar 2021 09:13:21 +0530 Subject: [PATCH] Improve FK trigger parallel-safety check added by 05c8482f7f. Commit 05c8482f7f added special logic related to parallel-safety of FK triggers. This is a bit of a hack and should have instead been done by simply setting appropriate proparallel values on those trigger functions themselves. Suggested-by: Tom Lane Author: Greg Nancarrow Reviewed-by: Amit Kapila Discussion: https://postgr.es/m/2309260.1615485644@sss.pgh.pa.us --- src/backend/optimizer/util/clauses.c | 14 -------------- src/include/catalog/catversion.h | 2 +- src/include/catalog/pg_proc.dat | 8 ++++---- 3 files changed, 5 insertions(+), 19 deletions(-) diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 12754fdb2ba..ade66a541c8 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -971,24 +971,10 @@ target_rel_trigger_max_parallel_hazard(Relation rel, */ for (i = 0; i < rel->trigdesc->numtriggers; i++) { - int trigtype; Oid tgfoid = rel->trigdesc->triggers[i].tgfoid; if (max_parallel_hazard_test(func_parallel(tgfoid), context)) return true; - - /* - * If the trigger type is RI_TRIGGER_FK, this indicates a FK exists in - * the relation, and this would result in creation of new CommandIds - * on insert/update and this isn't supported in a parallel worker (but - * is safe in the parallel leader). - */ - trigtype = RI_FKey_trigger_type(tgfoid); - if (trigtype == RI_TRIGGER_FK) - { - if (max_parallel_hazard_test(PROPARALLEL_RESTRICTED, context)) - return true; - } } return false; diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h index 33bb6f9672e..609d184e812 100644 --- a/src/include/catalog/catversion.h +++ b/src/include/catalog/catversion.h @@ -53,6 +53,6 @@ */ /* yyyymmddN */ -#define CATALOG_VERSION_NO 202103093 +#define CATALOG_VERSION_NO 202103131 #endif diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat index 61361a6bc93..93393fcfd4f 100644 --- a/src/include/catalog/pg_proc.dat +++ b/src/include/catalog/pg_proc.dat @@ -3745,11 +3745,11 @@ # Generic referential integrity constraint triggers { oid => '1644', descr => 'referential integrity FOREIGN KEY ... REFERENCES', - proname => 'RI_FKey_check_ins', provolatile => 'v', prorettype => 'trigger', - proargtypes => '', prosrc => 'RI_FKey_check_ins' }, + proname => 'RI_FKey_check_ins', provolatile => 'v', proparallel => 'r', + prorettype => 'trigger', proargtypes => '', prosrc => 'RI_FKey_check_ins' }, { oid => '1645', descr => 'referential integrity FOREIGN KEY ... REFERENCES', - proname => 'RI_FKey_check_upd', provolatile => 'v', prorettype => 'trigger', - proargtypes => '', prosrc => 'RI_FKey_check_upd' }, + proname => 'RI_FKey_check_upd', provolatile => 'v', proparallel => 'r', + prorettype => 'trigger', proargtypes => '', prosrc => 'RI_FKey_check_upd' }, { oid => '1646', descr => 'referential integrity ON DELETE CASCADE', proname => 'RI_FKey_cascade_del', provolatile => 'v', prorettype => 'trigger', proargtypes => '', prosrc => 'RI_FKey_cascade_del' },