From b21aed3964794f3ebfbfee9324badf1430b1efbc Mon Sep 17 00:00:00 2001 From: Kevin Grittner Date: Sat, 2 Nov 2013 19:18:41 -0500 Subject: [PATCH] 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 --- src/backend/commands/matview.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index d3195fc62e..f7b3244752 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) -- 2.40.0