aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/backend/rewrite/rewriteHandler.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
index 761047ca082..db3c2c7a76e 100644
--- a/src/backend/rewrite/rewriteHandler.c
+++ b/src/backend/rewrite/rewriteHandler.c
@@ -2765,6 +2765,21 @@ rewriteTargetView(Query *parsetree, Relation view)
heap_close(base_rel, NoLock);
/*
+ * If the view query contains any sublink subqueries then we need to also
+ * acquire locks on any relations they refer to. We know that there won't
+ * be any subqueries in the range table or CTEs, so we can skip those, as
+ * in AcquireRewriteLocks.
+ */
+ if (viewquery->hasSubLinks)
+ {
+ acquireLocksOnSubLinks_context context;
+
+ context.for_execute = true;
+ query_tree_walker(viewquery, acquireLocksOnSubLinks, &context,
+ QTW_IGNORE_RC_SUBQUERIES);
+ }
+
+ /*
* Create a new target RTE describing the base relation, and add it to the
* outer query's rangetable. (What's happening in the next few steps is
* very much like what the planner would do to "pull up" the view into the