From fc8d6da43a838b1a3bc9cf36d30f9fccda62166f Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Thu, 8 Aug 2024 13:29:25 +0000 Subject: [PATCH 1/5] Support distributed by clause specification when Create MV if not exists --- src/backend/parser/gram.y | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 5cac183f283..5860ab57d1d 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -7114,7 +7114,7 @@ CreateMatViewStmt: ctas->into->distributedBy = $10; $$ = (Node *) ctas; } - | CREATE OptNoLog incremental MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data + | CREATE OptNoLog incremental MATERIALIZED VIEW IF_P NOT EXISTS create_mv_target AS SelectStmt opt_with_data OptDistributedBy { CreateTableAsStmt *ctas = makeNode(CreateTableAsStmt); ctas->query = $11; @@ -7126,6 +7126,7 @@ CreateMatViewStmt: $9->rel->relpersistence = $2; $9->skipData = !($12); $9->ivm = $3; + ctas->into->distributedBy = $13; $$ = (Node *) ctas; } ; From 281974ded0b8013a606ac5a6c45023f1aeab1317 Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Thu, 8 Aug 2024 17:33:26 +0000 Subject: [PATCH 2/5] Add tests --- src/test/regress/expected/matview.out | 4 ++++ src/test/regress/sql/matview.sql | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/test/regress/expected/matview.out b/src/test/regress/expected/matview.out index 530e1b5d3fa..3b51482e909 100644 --- a/src/test/regress/expected/matview.out +++ b/src/test/regress/expected/matview.out @@ -522,6 +522,10 @@ DETAIL: drop cascades to materialized view mvtest_mv_v drop cascades to materialized view mvtest_mv_v_2 drop cascades to materialized view mvtest_mv_v_3 drop cascades to materialized view mvtest_mv_v_4 +-- Check that CREATE IF NOT EXISTS accept DISTRIBUTED BY +CREATE MATERIALIZED VIEW IF NOT EXISTS mv_ine_distr (a, b) AS + SELECT generate_series(1, 10) a, generate_series(1, 10) b DISTRIBUTED BY (b); +DROP MATERIALIZED VIEW mv_ine_distr; -- Check that unknown literals are converted to "text" in CREATE MATVIEW, -- so that we don't end up with unknown-type columns. CREATE MATERIALIZED VIEW mv_unspecified_types AS diff --git a/src/test/regress/sql/matview.sql b/src/test/regress/sql/matview.sql index 99170f00f79..f6eb430daa8 100644 --- a/src/test/regress/sql/matview.sql +++ b/src/test/regress/sql/matview.sql @@ -187,6 +187,11 @@ SELECT * FROM mvtest_mv_v_3; SELECT * FROM mvtest_mv_v_4; DROP TABLE mvtest_v CASCADE; +-- Check that CREATE IF NOT EXISTS accept DISTRIBUTED BY +CREATE MATERIALIZED VIEW IF NOT EXISTS mv_ine_distr (a, b) AS + SELECT generate_series(1, 10) a, generate_series(1, 10) b DISTRIBUTED BY (b); +DROP MATERIALIZED VIEW mv_ine_distr; + -- Check that unknown literals are converted to "text" in CREATE MATVIEW, -- so that we don't end up with unknown-type columns. CREATE MATERIALIZED VIEW mv_unspecified_types AS From 7538d064a9f6f5231acf87d29f896489c985e2aa Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Fri, 9 Aug 2024 09:25:38 +0000 Subject: [PATCH 3/5] Add matview_optimizer expected output --- src/test/regress/expected/matview_optimizer.out | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/regress/expected/matview_optimizer.out b/src/test/regress/expected/matview_optimizer.out index 503ef25bffa..0cfa82fbc85 100644 --- a/src/test/regress/expected/matview_optimizer.out +++ b/src/test/regress/expected/matview_optimizer.out @@ -531,6 +531,10 @@ DETAIL: drop cascades to materialized view mvtest_mv_v drop cascades to materialized view mvtest_mv_v_2 drop cascades to materialized view mvtest_mv_v_3 drop cascades to materialized view mvtest_mv_v_4 +-- Check that CREATE IF NOT EXISTS accept DISTRIBUTED BY +CREATE MATERIALIZED VIEW IF NOT EXISTS mv_ine_distr (a, b) AS + SELECT generate_series(1, 10) a, generate_series(1, 10) b DISTRIBUTED BY (b); +DROP MATERIALIZED VIEW mv_ine_distr; -- Check that unknown literals are converted to "text" in CREATE MATVIEW, -- so that we don't end up with unknown-type columns. CREATE MATERIALIZED VIEW mv_unspecified_types AS From d8fd92c8c163cd65dce4731fdac87b30968f7dff Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Fri, 9 Aug 2024 10:47:18 +0000 Subject: [PATCH 4/5] add \d+ to display dist key info. --- src/test/regress/expected/matview.out | 11 +++++++++++ src/test/regress/expected/matview_optimizer.out | 11 +++++++++++ 2 files changed, 22 insertions(+) diff --git a/src/test/regress/expected/matview.out b/src/test/regress/expected/matview.out index 3b51482e909..51b99230907 100644 --- a/src/test/regress/expected/matview.out +++ b/src/test/regress/expected/matview.out @@ -525,6 +525,17 @@ drop cascades to materialized view mvtest_mv_v_4 -- Check that CREATE IF NOT EXISTS accept DISTRIBUTED BY CREATE MATERIALIZED VIEW IF NOT EXISTS mv_ine_distr (a, b) AS SELECT generate_series(1, 10) a, generate_series(1, 10) b DISTRIBUTED BY (b); +\d+ mv_ine_distr + Materialized view "public.mv_ine_distr" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | +View definition: + SELECT generate_series(1, 10) AS a, + generate_series(1, 10) AS b; +Distributed by: (b) + DROP MATERIALIZED VIEW mv_ine_distr; -- Check that unknown literals are converted to "text" in CREATE MATVIEW, -- so that we don't end up with unknown-type columns. diff --git a/src/test/regress/expected/matview_optimizer.out b/src/test/regress/expected/matview_optimizer.out index 0cfa82fbc85..219695e75ae 100644 --- a/src/test/regress/expected/matview_optimizer.out +++ b/src/test/regress/expected/matview_optimizer.out @@ -534,6 +534,17 @@ drop cascades to materialized view mvtest_mv_v_4 -- Check that CREATE IF NOT EXISTS accept DISTRIBUTED BY CREATE MATERIALIZED VIEW IF NOT EXISTS mv_ine_distr (a, b) AS SELECT generate_series(1, 10) a, generate_series(1, 10) b DISTRIBUTED BY (b); +\d+ mv_ine_distr + Materialized view "public.mv_ine_distr" + Column | Type | Collation | Nullable | Default | Storage | Stats target | Description +--------+---------+-----------+----------+---------+---------+--------------+------------- + a | integer | | | | plain | | + b | integer | | | | plain | | +View definition: + SELECT generate_series(1, 10) AS a, + generate_series(1, 10) AS b; +Distributed by: (b) + DROP MATERIALIZED VIEW mv_ine_distr; -- Check that unknown literals are converted to "text" in CREATE MATVIEW, -- so that we don't end up with unknown-type columns. From ed69941a0113d659a63a414633a8c4b5134a276c Mon Sep 17 00:00:00 2001 From: reshke kirill Date: Fri, 9 Aug 2024 13:03:30 +0000 Subject: [PATCH 5/5] add .sql --- src/test/regress/sql/matview.sql | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/regress/sql/matview.sql b/src/test/regress/sql/matview.sql index f6eb430daa8..4477ffe8d9c 100644 --- a/src/test/regress/sql/matview.sql +++ b/src/test/regress/sql/matview.sql @@ -190,6 +190,7 @@ DROP TABLE mvtest_v CASCADE; -- Check that CREATE IF NOT EXISTS accept DISTRIBUTED BY CREATE MATERIALIZED VIEW IF NOT EXISTS mv_ine_distr (a, b) AS SELECT generate_series(1, 10) a, generate_series(1, 10) b DISTRIBUTED BY (b); +\d+ mv_ine_distr DROP MATERIALIZED VIEW mv_ine_distr; -- Check that unknown literals are converted to "text" in CREATE MATVIEW,