diff --git a/src/backend/rewrite/rewriteDefine.c b/src/backend/rewrite/rewriteDefine.c index 7da83b9b885529b6954447eceb0d167c638bf5eb..f6b0fd2a40023202b5373b8e04574b3d9dcb9f47 100644 --- a/src/backend/rewrite/rewriteDefine.c +++ b/src/backend/rewrite/rewriteDefine.c @@ -549,6 +549,8 @@ DefineQueryRewrite(char *rulename, /* drop storage while table still looks like a table */ RelationDropStorage(event_relation); DeleteSystemAttributeTuples(event_relid); + /* delete distribution policy record */ + GpPolicyRemove(event_relid); /* * Drop the toast table if any. (This won't take care of updating the @@ -585,8 +587,8 @@ DefineQueryRewrite(char *rulename, /* * Fix pg_class entry to look like a normal view's, including setting - * the correct relkind and removal of reltoastrelid of the toast table - * we potentially removed above. + * the correct relkind/relstorage and removal of reltoastrelid of the + * toast table we potentially removed above. */ classTup = SearchSysCacheCopy1(RELOID, ObjectIdGetDatum(event_relid)); if (!HeapTupleIsValid(classTup)) @@ -600,6 +602,7 @@ DefineQueryRewrite(char *rulename, classForm->reltoastrelid = InvalidOid; classForm->relhasindex = false; classForm->relkind = RELKIND_VIEW; + classForm->relstorage = RELSTORAGE_VIRTUAL; classForm->relhasoids = false; classForm->relhaspkey = false; classForm->relfrozenxid = InvalidTransactionId; diff --git a/src/test/regress/expected/gp_rules.out b/src/test/regress/expected/gp_rules.out index 63bfbae598642368a8dae87910b2d7b3f817d375..eff1692715926b8d51f0517bc0a7e74f2883661c 100644 --- a/src/test/regress/expected/gp_rules.out +++ b/src/test/regress/expected/gp_rules.out @@ -8,6 +8,23 @@ NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as HINT: The 'DISTRIBUTED BY' clause determines the distribution of data. Make sure column(s) chosen are the optimal data distribution key to minimize skew. CREATE rule "_RETURN" as on select to table_to_view_test1 do instead select * from table_to_view_test2; +-- relkind and relstorage have been changed to 'v' +SELECT relkind, relstorage FROM pg_class + WHERE oid = 'table_to_view_test1'::regclass; + relkind | relstorage +---------+------------ + v | v +(1 row) + +-- distribution policy record has been deleted +SELECT 1 FROM gp_distribution_policy + WHERE localoid = 'table_to_view_test1'::regclass; + ?column? +---------- +(0 rows) + +DROP VIEW table_to_view_test1; +DROP TABLE table_to_view_test2; -- Same for an Append-Only table. It is currently not supported. CREATE table aotable_to_view_test1 (a int) with (appendonly=true); NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Greenplum Database data distribution key for this table. diff --git a/src/test/regress/sql/gp_rules.sql b/src/test/regress/sql/gp_rules.sql index 2c8add8885a2a96b466f8f962822fc3033105373..9a794c9d5748f333cbcbcf0db2c98d29627da05f 100644 --- a/src/test/regress/sql/gp_rules.sql +++ b/src/test/regress/sql/gp_rules.sql @@ -7,6 +7,16 @@ CREATE table table_to_view_test2 (a int); CREATE rule "_RETURN" as on select to table_to_view_test1 do instead select * from table_to_view_test2; +-- relkind and relstorage have been changed to 'v' +SELECT relkind, relstorage FROM pg_class + WHERE oid = 'table_to_view_test1'::regclass; +-- distribution policy record has been deleted +SELECT 1 FROM gp_distribution_policy + WHERE localoid = 'table_to_view_test1'::regclass; + +DROP VIEW table_to_view_test1; +DROP TABLE table_to_view_test2; + -- Same for an Append-Only table. It is currently not supported. CREATE table aotable_to_view_test1 (a int) with (appendonly=true);