diff options
author | Robert Haas | 2013-07-22 22:10:05 +0000 |
---|---|---|
committer | Robert Haas | 2013-07-22 22:10:05 +0000 |
commit | 21e28e4531e761e7cdf1b9a0bbf0c06f6107686a (patch) | |
tree | 71f2edcb92bb6ec08bbe6eaf1490bdae7cb45f2d | |
parent | 2e44770fa39051f404f7d94fed557b359b1dba3c (diff) |
Fix cache flush hazard in ExecRefreshMatView.
Andres Freund
-rw-r--r-- | src/backend/commands/matview.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c index 46149eed4f7..09ea344256a 100644 --- a/src/backend/commands/matview.c +++ b/src/backend/commands/matview.c @@ -141,6 +141,7 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString, List *actions; Query *dataQuery; Oid tableSpace; + Oid owner; Oid OIDNewHeap; DestReceiver *dest; bool concurrent; @@ -238,6 +239,8 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString, else tableSpace = matviewRel->rd_rel->reltablespace; + owner = matviewRel->rd_rel->relowner; + heap_close(matviewRel, NoLock); /* Create the transient table that will receive the regenerated data. */ @@ -247,8 +250,7 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString, /* Generate the data, if wanted. */ if (!stmt->skipData) - refresh_matview_datafill(dest, dataQuery, queryString, - matviewRel->rd_rel->relowner); + refresh_matview_datafill(dest, dataQuery, queryString, owner); /* Make the matview match the newly generated data. */ if (concurrent) |