@@ -468,6 +468,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
468
468
469
469
%type <range> OptTempTableName
470
470
%type <into> into_clause create_as_target create_mv_target
471
+ %type <boolean> incremental
471
472
472
473
%type <defelt> createfunc_opt_item common_func_opt_item dostmt_opt_item
473
474
%type <fun_param> func_arg func_arg_with_default table_func_column aggr_arg
@@ -738,7 +739,7 @@ static Node *makeRecursiveViewSelect(char *relname, List *aliases, Node *query);
738
739
HANDLER HAVING HEADER_P HOLD HOUR_P
739
740
740
741
IDENTITY_P IF_P ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IMPORT_P IN_P INCLUDE
741
- INCLUDING INCREMENT INDENT INDEX INDEXES INHERIT INHERITS INITIALLY INLINE_P
742
+ INCLUDING INCREMENT INCREMENTAL INDENT INDEX INDEXES INHERIT INHERITS INITIALLY INLINE_P
742
743
INNER_P INOUT INPUT_P INSENSITIVE INSERT INSTEAD INT_P INTEGER
743
744
INTERSECT INTERVAL INTO INVOKER IS ISNULL ISOLATION
744
745
@@ -4803,32 +4804,34 @@ opt_with_data:
4803
4804
*****************************************************************************/
4804
4805
4805
4806
CreateMatViewStmt :
4806
- CREATE OptNoLog MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data
4807
+ CREATE OptNoLog incremental MATERIALIZED VIEW create_mv_target AS SelectStmt opt_with_data
4807
4808
{
4808
4809
CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt);
4809
4810
4810
- ctas->query = $7 ;
4811
- ctas->into = $5 ;
4811
+ ctas->query = $8 ;
4812
+ ctas->into = $6 ;
4812
4813
ctas->objtype = OBJECT_MATVIEW;
4813
4814
ctas->is_select_into = false ;
4814
4815
ctas->if_not_exists = false ;
4815
4816
/* cram additional flags into the IntoClause */
4816
- $5 ->rel->relpersistence = $2 ;
4817
- $5 ->skipData = !($8 );
4817
+ $6 ->rel->relpersistence = $2 ;
4818
+ $6 ->skipData = !($9 );
4819
+ $6 ->ivm = $3 ;
4818
4820
$$ = (Node *) ctas;
4819
4821
}
4820
- | CREATE OptNoLog MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data
4822
+ | CREATE OptNoLog incremental MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data
4821
4823
{
4822
4824
CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt);
4823
4825
4824
- ctas->query = $10 ;
4825
- ctas->into = $8 ;
4826
+ ctas->query = $11 ;
4827
+ ctas->into = $9 ;
4826
4828
ctas->objtype = OBJECT_MATVIEW;
4827
4829
ctas->is_select_into = false ;
4828
4830
ctas->if_not_exists = true ;
4829
4831
/* cram additional flags into the IntoClause */
4830
- $8 ->rel->relpersistence = $2 ;
4831
- $8 ->skipData = !($11 );
4832
+ $9 ->rel->relpersistence = $2 ;
4833
+ $9 ->skipData = !($12 );
4834
+ $9 ->ivm = $3 ;
4832
4835
$$ = (Node *) ctas;
4833
4836
}
4834
4837
;
@@ -4845,9 +4848,14 @@ create_mv_target:
4845
4848
$$ ->tableSpaceName = $5 ;
4846
4849
$$ ->viewQuery = NULL ; /* filled at analysis time */
4847
4850
$$ ->skipData = false ; /* might get changed later */
4851
+ $$ ->ivm = false ;
4848
4852
}
4849
4853
;
4850
4854
4855
+ incremental : INCREMENTAL { $$ = true ; }
4856
+ | /* EMPTY*/ { $$ = false ; }
4857
+ ;
4858
+
4851
4859
OptNoLog : UNLOGGED { $$ = RELPERSISTENCE_UNLOGGED; }
4852
4860
| /* EMPTY*/ { $$ = RELPERSISTENCE_PERMANENT; }
4853
4861
;
@@ -17686,6 +17694,7 @@ unreserved_keyword:
17686
17694
| INCLUDE
17687
17695
| INCLUDING
17688
17696
| INCREMENT
17697
+ | INCREMENTAL
17689
17698
| INDENT
17690
17699
| INDEX
17691
17700
| INDEXES
@@ -18274,6 +18283,7 @@ bare_label_keyword:
18274
18283
| INCLUDE
18275
18284
| INCLUDING
18276
18285
| INCREMENT
18286
+ | INCREMENTAL
18277
18287
| INDENT
18278
18288
| INDEX
18279
18289
| INDEXES
0 commit comments