summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin Grittner <kgrittn@postgresql.org>2013-11-05 15:36:33 -0600
committerKevin Grittner <kgrittn@postgresql.org>2013-11-05 15:36:33 -0600
commit2636ecf78b608f7faf1a0a7ff9b56fa54b7710db (patch)
treedbd83f593f335cbd8dd39387a0dec61e30629cfb
parent6331de1d44f01d408aa48c5c996bae8932f7a072 (diff)
Lock relation used to generate fresh data for RMV.
The relation should not be accessible to any other process, but it should be locked for consistency. Since this is not known to cause any bug, it will not be back-patch, at least for now. Per report from Andres Freund
-rw-r--r--src/backend/commands/matview.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/backend/commands/matview.c b/src/backend/commands/matview.c
index d5a10adc671..e3b0cbb708e 100644
--- a/src/backend/commands/matview.c
+++ b/src/backend/commands/matview.c
@@ -30,6 +30,7 @@
#include "miscadmin.h"
#include "parser/parse_relation.h"
#include "rewrite/rewriteHandler.h"
+#include "storage/lmgr.h"
#include "storage/smgr.h"
#include "tcop/tcopprot.h"
#include "utils/builtins.h"
@@ -240,9 +241,14 @@ ExecRefreshMatView(RefreshMatViewStmt *stmt, const char *queryString,
heap_close(matviewRel, NoLock);
- /* Create the transient table that will receive the regenerated data. */
+ /*
+ * Create the transient table that will receive the regenerated data.
+ * Lock it against access by any other process until commit (by which time
+ * it will be gone).
+ */
OIDNewHeap = make_new_heap(matviewOid, tableSpace, concurrent,
ExclusiveLock);
+ LockRelationOid(OIDNewHeap, AccessExclusiveLock);
dest = CreateTransientRelDestReceiver(OIDNewHeap);
/* Generate the data, if wanted. */