aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorKevin Grittner <kgrittn@postgresql.org>2013-11-02 19:18:41 -0500
committerKevin Grittner <kgrittn@postgresql.org>2013-11-02 19:18:41 -0500
commitb21aed3964794f3ebfbfee9324badf1430b1efbc (patch)
treef2144de4f9704beb66c4561e145140edf91fdbc1 /src/backend
parentb2cd72cbbdd2a1b657d7dc874fcc9f1c1d83d8e3 (diff)
downloadpostgresql-b21aed3964794f3ebfbfee9324badf1430b1efbc.tar.gz
postgresql-b21aed3964794f3ebfbfee9324badf1430b1efbc.zip
Acquire appropriate locks when rewriting during RMV.
Since the query has not been freshly parsed when executing REFRESH MATERIALIZED VIEW, locks must be explicitly taken before rewrite. Backpatch to 9.3. Andres Freund
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/commands/matview.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c
index d3195fc62e5..f7b3244752e 100644
--- a/src/backend/commands/matview.c
+++ b/src/backend/commands/matview.c
@@ -242,9 +242,12 @@ refresh_matview_datafill(DestReceiver *dest, Query *query,
List *rewritten;
PlannedStmt *plan;
QueryDesc *queryDesc;
+ Query *copied_query;
- /* Rewrite, copying the given Query to make sure it's not changed */
- rewritten = QueryRewrite((Query *) copyObject(query));
+ /* Lock and rewrite, using a copy to preserve the original query. */
+ copied_query = copyObject(query);
+ AcquireRewriteLocks(copied_query, false);
+ rewritten = QueryRewrite(copied_query);
/* SELECT should never rewrite to more or less than one SELECT query */
if (list_length(rewritten) != 1)