diff --git a/src/backend/rewrite/rewriteHandler.c b/src/backend/rewrite/rewriteHandler.c
new file mode 100644
index a467588..42d66a0
*** a/src/backend/rewrite/rewriteHandler.c
--- b/src/backend/rewrite/rewriteHandler.c
*************** rewriteTargetView(Query *parsetree, Rela
*** 2387,2392 ****
--- 2387,2402 ----
  	new_rte = (RangeTblEntry *) copyObject(base_rte);
  	parsetree->rtable = lappend(parsetree->rtable, new_rte);
  	new_rt_index = list_length(parsetree->rtable);
+ 	new_rte->inFromCl = view_rte->inFromCl;
+ 
+ 	/*
+ 	 * For INSERT, don't use inheritance on the new target RTE even if is is
+ 	 * enabled in the view query --- we only want to insert into the base
+ 	 * parent relation.  For UPDATE/DELETE, respect the view query's
+ 	 * inheritance flag.
+ 	 */
+ 	if (parsetree->commandType == CMD_INSERT)
+ 		new_rte->inh = false;
  
  	/*
  	 * Make a copy of the view's targetlist, adjusting its Vars to reference
diff --git a/src/test/regress/expected/updatable_views.out b/src/test/regress/expected/updatable_views.out
new file mode 100644
index ecb61e0..1363103
*** a/src/test/regress/expected/updatable_views.out
--- b/src/test/regress/expected/updatable_views.out
*************** SELECT * FROM rw_view1;
*** 1063,1065 ****
--- 1063,1165 ----
  
  DROP TABLE base_tbl CASCADE;
  NOTICE:  drop cascades to view rw_view1
+ -- inheritance tests
+ CREATE TABLE base_tbl_parent (a int);
+ CREATE TABLE base_tbl_child (CHECK (a > 0)) INHERITS (base_tbl_parent);
+ INSERT INTO base_tbl_parent SELECT * FROM generate_series(-8, -1);
+ INSERT INTO base_tbl_child SELECT * FROM generate_series(1, 8);
+ CREATE VIEW rw_view1 AS SELECT * FROM base_tbl_parent;
+ CREATE VIEW rw_view2 AS SELECT * FROM ONLY base_tbl_parent;
+ SELECT * FROM rw_view1 ORDER BY a;
+  a  
+ ----
+  -8
+  -7
+  -6
+  -5
+  -4
+  -3
+  -2
+  -1
+   1
+   2
+   3
+   4
+   5
+   6
+   7
+   8
+ (16 rows)
+ 
+ SELECT * FROM ONLY rw_view1 ORDER BY a;
+  a  
+ ----
+  -8
+  -7
+  -6
+  -5
+  -4
+  -3
+  -2
+  -1
+   1
+   2
+   3
+   4
+   5
+   6
+   7
+   8
+ (16 rows)
+ 
+ SELECT * FROM rw_view2 ORDER BY a;
+  a  
+ ----
+  -8
+  -7
+  -6
+  -5
+  -4
+  -3
+  -2
+  -1
+ (8 rows)
+ 
+ INSERT INTO rw_view1 VALUES (-100), (100);
+ INSERT INTO rw_view2 VALUES (-200), (200);
+ UPDATE rw_view1 SET a = a*10 WHERE a IN (-1, 1); -- Should produce -10 and 10
+ UPDATE ONLY rw_view1 SET a = a*10 WHERE a IN (-2, 2); -- Should produce -20 and 20
+ UPDATE rw_view2 SET a = a*10 WHERE a IN (-3, 3); -- Should produce -30 only
+ UPDATE ONLY rw_view2 SET a = a*10 WHERE a IN (-4, 4); -- Should produce -40 only
+ DELETE FROM rw_view1 WHERE a IN (-5, 5); -- Should delete -5 and 5
+ DELETE FROM ONLY rw_view1 WHERE a IN (-6, 6); -- Should delete -6 and 6
+ DELETE FROM rw_view2 WHERE a IN (-7, 7); -- Should delete -7 only
+ DELETE FROM ONLY rw_view2 WHERE a IN (-8, 8); -- Should delete -8 only
+ SELECT * FROM ONLY base_tbl_parent ORDER BY a;
+   a   
+ ------
+  -200
+  -100
+   -40
+   -30
+   -20
+   -10
+   100
+   200
+ (8 rows)
+ 
+ SELECT * FROM base_tbl_child ORDER BY a;
+  a  
+ ----
+   3
+   4
+   7
+   8
+  10
+  20
+ (6 rows)
+ 
+ DROP TABLE base_tbl_parent, base_tbl_child CASCADE;
+ NOTICE:  drop cascades to 2 other objects
+ DETAIL:  drop cascades to view rw_view1
+ drop cascades to view rw_view2
diff --git a/src/test/regress/sql/updatable_views.sql b/src/test/regress/sql/updatable_views.sql
new file mode 100644
index 49dfedd..c8a1c62
*** a/src/test/regress/sql/updatable_views.sql
--- b/src/test/regress/sql/updatable_views.sql
*************** UPDATE rw_view1 SET arr[1] = 42, arr[2]
*** 509,511 ****
--- 509,543 ----
  SELECT * FROM rw_view1;
  
  DROP TABLE base_tbl CASCADE;
+ 
+ -- inheritance tests
+ 
+ CREATE TABLE base_tbl_parent (a int);
+ CREATE TABLE base_tbl_child (CHECK (a > 0)) INHERITS (base_tbl_parent);
+ INSERT INTO base_tbl_parent SELECT * FROM generate_series(-8, -1);
+ INSERT INTO base_tbl_child SELECT * FROM generate_series(1, 8);
+ 
+ CREATE VIEW rw_view1 AS SELECT * FROM base_tbl_parent;
+ CREATE VIEW rw_view2 AS SELECT * FROM ONLY base_tbl_parent;
+ 
+ SELECT * FROM rw_view1 ORDER BY a;
+ SELECT * FROM ONLY rw_view1 ORDER BY a;
+ SELECT * FROM rw_view2 ORDER BY a;
+ 
+ INSERT INTO rw_view1 VALUES (-100), (100);
+ INSERT INTO rw_view2 VALUES (-200), (200);
+ 
+ UPDATE rw_view1 SET a = a*10 WHERE a IN (-1, 1); -- Should produce -10 and 10
+ UPDATE ONLY rw_view1 SET a = a*10 WHERE a IN (-2, 2); -- Should produce -20 and 20
+ UPDATE rw_view2 SET a = a*10 WHERE a IN (-3, 3); -- Should produce -30 only
+ UPDATE ONLY rw_view2 SET a = a*10 WHERE a IN (-4, 4); -- Should produce -40 only
+ 
+ DELETE FROM rw_view1 WHERE a IN (-5, 5); -- Should delete -5 and 5
+ DELETE FROM ONLY rw_view1 WHERE a IN (-6, 6); -- Should delete -6 and 6
+ DELETE FROM rw_view2 WHERE a IN (-7, 7); -- Should delete -7 only
+ DELETE FROM ONLY rw_view2 WHERE a IN (-8, 8); -- Should delete -8 only
+ 
+ SELECT * FROM ONLY base_tbl_parent ORDER BY a;
+ SELECT * FROM base_tbl_child ORDER BY a;
+ 
+ DROP TABLE base_tbl_parent, base_tbl_child CASCADE;
