>From e49502bca39c70ebadc7cbe2fdacf68c33be627b Mon Sep 17 00:00:00 2001
From: Andres Freund <andres@anarazel.de>
Date: Wed, 23 Oct 2013 02:35:05 +0200
Subject: [PATCH 3/4] hack INSERT INTO some_view; to lock rels in the
 underlying view

This is not an acceptable patch!
---
 src/backend/parser/parse_relation.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/src/backend/parser/parse_relation.c b/src/backend/parser/parse_relation.c
index 5f46913..731ac7d 100644
--- a/src/backend/parser/parse_relation.c
+++ b/src/backend/parser/parse_relation.c
@@ -27,6 +27,7 @@
 #include "parser/parsetree.h"
 #include "parser/parse_relation.h"
 #include "parser/parse_type.h"
+#include "rewrite/rewriteHandler.h"
 #include "utils/builtins.h"
 #include "utils/lsyscache.h"
 #include "utils/rel.h"
@@ -1009,6 +1010,23 @@ parserOpenTable(ParseState *pstate, const RangeVar *relation, int lockmode)
 								relation->relname)));
 		}
 	}
+	if (rel->rd_rel->relkind == RELKIND_VIEW)
+	{
+		int i;
+		for (i = 0; i < rel->rd_rules->numLocks; i++)
+		{
+			Query *v;
+			RewriteRule *r;
+			ListCell   *c;
+
+			r = rel->rd_rules->rules[i];
+			foreach(c, r->actions)
+			{
+				v = (Query *) lfirst(c);
+				AcquireRewriteLocks(copyObject(v), false);
+			}
+		}
+	}
 	cancel_parser_errposition_callback(&pcbstate);
 	return rel;
 }
-- 
1.8.3.251.g1462b67

