diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 87f5e95827..a769e38829 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -4138,6 +4138,7 @@ RefreshMatViewStmt: REFRESH MATERIALIZED VIEW opt_concurrently qualified_name opt_with_data { RefreshMatViewStmt *n = makeNode(RefreshMatViewStmt); + n->relkind = OBJECT_MATVIEW; n->concurrent = $4; n->relation = $5; n->skipData = !($6); diff --git a/src/include/nodes/parsenodes.h b/src/include/nodes/parsenodes.h index 07ab1a3dde..2998f401bb 100644 --- a/src/include/nodes/parsenodes.h +++ b/src/include/nodes/parsenodes.h @@ -3217,6 +3217,7 @@ typedef struct RefreshMatViewStmt bool concurrent; /* allow concurrent access? */ bool skipData; /* true for WITH NO DATA */ RangeVar *relation; /* relation to insert into */ + ObjectType relkind; /* OBJECT_MATVIEW */ } RefreshMatViewStmt; /* ---------------------- diff --git a/src/test/regress/expected/matview.out b/src/test/regress/expected/matview.out index 08cd4bea48..1e4eeb46ee 100644 --- a/src/test/regress/expected/matview.out +++ b/src/test/regress/expected/matview.out @@ -589,3 +589,20 @@ SELECT * FROM mvtest2; ERROR: materialized view "mvtest2" has not been populated HINT: Use the REFRESH MATERIALIZED VIEW command. ROLLBACK; +-- make sure REFRESH MATERIALIZED VIEW errors return that the error occurred on +-- a "materialized view" +CREATE ROLE regress_user_mvtest1; +CREATE ROLE regress_user_mvtest2; +SET SESSION AUTHORIZATION regress_user_mvtest1; +CREATE TABLE mvtest_a (x int); +CREATE MATERIALIZED VIEW mvtest_mv_a AS SELECT * FROM mvtest_a; +REFRESH MATERIALIZED VIEW mvtest_mv_a; +SET SESSION AUTHORIZATION regress_user_mvtest2; +REFRESH MATERIALIZED VIEW mvtest_mv_a; +ERROR: must be owner of materialized view mvtest_mv_a +SET SESSION AUTHORIZATION regress_user_mvtest1; +DROP MATERIALIZED VIEW mvtest_mv_a; +DROP TABLE mvtest_a; +RESET SESSION AUTHORIZATION; +DROP ROLE regress_user_mvtest2; +DROP ROLE regress_user_mvtest1; diff --git a/src/test/regress/sql/matview.sql b/src/test/regress/sql/matview.sql index d96175aa26..349f0f51fd 100644 --- a/src/test/regress/sql/matview.sql +++ b/src/test/regress/sql/matview.sql @@ -236,3 +236,20 @@ SELECT mvtest_func(); SELECT * FROM mvtest1; SELECT * FROM mvtest2; ROLLBACK; + +-- make sure REFRESH MATERIALIZED VIEW errors return that the error occurred on +-- a "materialized view" +CREATE ROLE regress_user_mvtest1; +CREATE ROLE regress_user_mvtest2; +SET SESSION AUTHORIZATION regress_user_mvtest1; +CREATE TABLE mvtest_a (x int); +CREATE MATERIALIZED VIEW mvtest_mv_a AS SELECT * FROM mvtest_a; +REFRESH MATERIALIZED VIEW mvtest_mv_a; +SET SESSION AUTHORIZATION regress_user_mvtest2; +REFRESH MATERIALIZED VIEW mvtest_mv_a; +SET SESSION AUTHORIZATION regress_user_mvtest1; +DROP MATERIALIZED VIEW mvtest_mv_a; +DROP TABLE mvtest_a; +RESET SESSION AUTHORIZATION; +DROP ROLE regress_user_mvtest2; +DROP ROLE regress_user_mvtest1;