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
pull/6/head
Kevin Grittner 12 years ago
parent 6331de1d44
commit 2636ecf78b
  1. 8
      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. */

Loading…
Cancel
Save