*** a/src/backend/commands/createas.c
--- b/src/backend/commands/createas.c
***************
*** 223,228 **** GetIntoRelEFlags(IntoClause *intoClause)
--- 223,231 ----
  	else
  		flags = EXEC_FLAG_WITHOUT_OIDS;
  
+ 	Assert(intoClause->relkind != RELKIND_MATVIEW ||
+ 		   flags == EXEC_FLAG_WITHOUT_OIDS);
+ 
  	if (intoClause->skipData)
  		flags |= EXEC_FLAG_WITH_NO_DATA;
  
*** a/src/backend/nodes/makefuncs.c
--- b/src/backend/nodes/makefuncs.c
***************
*** 17,22 ****
--- 17,23 ----
  
  #include "catalog/pg_class.h"
  #include "catalog/pg_type.h"
+ #include "commands/defrem.h"
  #include "nodes/makefuncs.h"
  #include "nodes/nodeFuncs.h"
  #include "utils/lsyscache.h"
***************
*** 508,510 **** makeDefElemExtended(char *nameSpace, char *name, Node *arg,
--- 509,539 ----
  
  	return res;
  }
+ 
+ List *
+ makeOptsWithoutOids(List *defList)
+ {
+ 	ListCell   *cell;
+ 
+ 	/* Scan list to see if OIDS was included */
+ 	foreach(cell, defList)
+ 	{
+ 		DefElem    *def = (DefElem *) lfirst(cell);
+ 
+ 		if (def->defnamespace == NULL &&
+ 			pg_strcasecmp(def->defname, "oids") == 0)
+ 		{
+ 			bool oids = defGetBoolean(def);
+ 
+ 			if (oids)
+ 				ereport(ERROR,
+ 						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
+ 						 errmsg("WITH OIDS is not an allowed option")));
+ 
+ 			return defList;
+ 		}
+ 	}
+ 
+ 	/* OIDS option was not specified, add it as false. */
+ 	return lappend(defList, defWithOids(false));
+ }
*** a/src/backend/parser/gram.y
--- b/src/backend/parser/gram.y
***************
*** 3271,3277 **** create_mv_target:
  					$$ = makeNode(IntoClause);
  					$$->rel = $1;
  					$$->colNames = $2;
! 					$$->options = $3;
  					$$->onCommit = ONCOMMIT_NOOP;
  					$$->tableSpaceName = $4;
  					$$->skipData = false;		/* might get changed later */
--- 3271,3277 ----
  					$$ = makeNode(IntoClause);
  					$$->rel = $1;
  					$$->colNames = $2;
! 					$$->options = makeOptsWithoutOids($3);
  					$$->onCommit = ONCOMMIT_NOOP;
  					$$->tableSpaceName = $4;
  					$$->skipData = false;		/* might get changed later */
*** a/src/include/nodes/makefuncs.h
--- b/src/include/nodes/makefuncs.h
***************
*** 79,82 **** extern DefElem *makeDefElem(char *name, Node *arg);
--- 79,84 ----
  extern DefElem *makeDefElemExtended(char *nameSpace, char *name, Node *arg,
  					DefElemAction defaction);
  
+ extern List *makeOptsWithoutOids(List *options);
+ 
  #endif   /* MAKEFUNC_H */
