diff options
author | Amit Kapila <akapila@postgresql.org> | 2021-03-13 09:13:21 +0530 |
---|---|---|
committer | Amit Kapila <akapila@postgresql.org> | 2021-03-13 09:20:52 +0530 |
commit | c5be48f092016b1caf597b2e21d588b56c88a23e (patch) | |
tree | 1a94d063d7f536cf6d0d9f9d42155b110b510cd3 | |
parent | b9164eab208342d685638fc90048ffaa2688cb47 (diff) | |
download | postgresql-c5be48f092016b1caf597b2e21d588b56c88a23e.tar.gz postgresql-c5be48f092016b1caf597b2e21d588b56c88a23e.zip |
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
-rw-r--r-- | src/backend/optimizer/util/clauses.c | 14 | ||||
-rw-r--r-- | src/include/catalog/catversion.h | 2 | ||||
-rw-r--r-- | 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' }, |