diff --git a/src/backend/commands/policy.c b/src/backend/commands/policy.c index 677391b460c..363d85be7e5 100644 --- a/src/backend/commands/policy.c +++ b/src/backend/commands/policy.c @@ -391,6 +391,13 @@ RemovePolicyById(Oid policy_id) systable_endscan(sscan); + /* + * CBDB GITHUB ISSUE: + * https://github.com/cloudberrydb/cloudberrydb/issues/504 + */ + if (Gp_role == GP_ROLE_DISPATCH) + MetaTrackDropObject(PolicyRelationId, policy_id); + /* * Note that, unlike some of the other flags in pg_class, relrowsecurity * is not just an indication of if policies exist. When relrowsecurity is diff --git a/src/backend/commands/publicationcmds.c b/src/backend/commands/publicationcmds.c index cc86fe4eb1d..1f42c5ac065 100644 --- a/src/backend/commands/publicationcmds.c +++ b/src/backend/commands/publicationcmds.c @@ -573,6 +573,13 @@ RemovePublicationById(Oid pubid) if (pubform->puballtables) CacheInvalidateRelcacheAll(); + /* + * CBDB GITHUB ISSUE: + * https://github.com/cloudberrydb/cloudberrydb/issues/504 + */ + if (Gp_role == GP_ROLE_DISPATCH) + MetaTrackDropObject(PublicationRelationId, pubid); + CatalogTupleDelete(rel, &tup->t_self); ReleaseSysCache(tup); diff --git a/src/backend/commands/schemacmds.c b/src/backend/commands/schemacmds.c index 1afbde1b754..17a10fca906 100644 --- a/src/backend/commands/schemacmds.c +++ b/src/backend/commands/schemacmds.c @@ -325,6 +325,13 @@ RemoveSchemaById(Oid schemaOid) CatalogTupleDelete(relation, &tup->t_self); + /* + * CBDB GITHUB ISSUE: + * https://github.com/cloudberrydb/cloudberrydb/issues/504 + */ + if (Gp_role == GP_ROLE_DISPATCH) + MetaTrackDropObject(NamespaceRelationId, schemaOid); + ReleaseSysCache(tup); table_close(relation, RowExclusiveLock); diff --git a/src/test/regress/expected/bfv_meta_track.out b/src/test/regress/expected/bfv_meta_track.out new file mode 100644 index 00000000000..df4e58d8a45 --- /dev/null +++ b/src/test/regress/expected/bfv_meta_track.out @@ -0,0 +1,60 @@ +-- +--CBDB GITHUB ISSUE: +--https://github.com/cloudberrydb/cloudberrydb/issues/504 +-- +create schema bfv_meta_track; +set search_path to bfv_meta_track; +select count(*) from pg_stat_last_operation join + pg_namespace on pg_namespace.oid = pg_stat_last_operation.objid + where pg_namespace.nspname = 'bfv_meta_track'; + count +------- + 1 +(1 row) + +-- test drop popicy +create table t1(a int); +NOTICE: Table doesn't have 'DISTRIBUTED BY' clause -- Using column named 'a' as the Cloudberry Database data distribution key for this table. +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 policy p1 on t1 using (a % 2 = 0); +select count(*) from pg_stat_last_operation a join pg_policy b on b.oid = a.objid where b.polname = 'p1' and b.polrelid ='t1'::regclass::oid; + count +------- + 1 +(1 row) + +drop policy p1 on t1; +select count(*) from pg_stat_last_operation a join pg_policy b on b.oid = a.objid where b.polname = 'p1' and b.polrelid ='t1'::regclass::oid; + count +------- + 0 +(1 row) + +--test drop publication +-- start_ignore +create publication pub1; +-- end_ignore +select count(*) from pg_stat_last_operation a join pg_publication b on b.oid = a.objid where b.pubname = 'pub1'; + count +------- + 1 +(1 row) + +drop publication pub1; +select count(*) from pg_stat_last_operation a join pg_publication b on b.oid = a.objid where b.pubname = 'pub1'; + count +------- + 0 +(1 row) + +drop schema bfv_meta_track cascade; +NOTICE: drop cascades to table t1 +-- test drop schema +select count(*) from pg_stat_last_operation join + pg_namespace on pg_namespace.oid = pg_stat_last_operation.objid + where pg_namespace.nspname = 'bfv_meta_track'; + count +------- + 0 +(1 row) + diff --git a/src/test/regress/greenplum_schedule b/src/test/regress/greenplum_schedule index ee560250cf7..577ed66a383 100755 --- a/src/test/regress/greenplum_schedule +++ b/src/test/regress/greenplum_schedule @@ -327,4 +327,6 @@ test: motion_socket # subtransaction overflow test test: subtrx_overflow +test: bfv_meta_track + # end of tests diff --git a/src/test/regress/sql/bfv_meta_track.sql b/src/test/regress/sql/bfv_meta_track.sql new file mode 100644 index 00000000000..83f08c26b1e --- /dev/null +++ b/src/test/regress/sql/bfv_meta_track.sql @@ -0,0 +1,31 @@ +-- +--CBDB GITHUB ISSUE: +--https://github.com/cloudberrydb/cloudberrydb/issues/504 +-- + +create schema bfv_meta_track; +set search_path to bfv_meta_track; +select count(*) from pg_stat_last_operation join + pg_namespace on pg_namespace.oid = pg_stat_last_operation.objid + where pg_namespace.nspname = 'bfv_meta_track'; + +-- test drop popicy +create table t1(a int); +create policy p1 on t1 using (a % 2 = 0); +select count(*) from pg_stat_last_operation a join pg_policy b on b.oid = a.objid where b.polname = 'p1' and b.polrelid ='t1'::regclass::oid; +drop policy p1 on t1; +select count(*) from pg_stat_last_operation a join pg_policy b on b.oid = a.objid where b.polname = 'p1' and b.polrelid ='t1'::regclass::oid; + +--test drop publication +-- start_ignore +create publication pub1; +-- end_ignore +select count(*) from pg_stat_last_operation a join pg_publication b on b.oid = a.objid where b.pubname = 'pub1'; +drop publication pub1; +select count(*) from pg_stat_last_operation a join pg_publication b on b.oid = a.objid where b.pubname = 'pub1'; + +drop schema bfv_meta_track cascade; +-- test drop schema +select count(*) from pg_stat_last_operation join + pg_namespace on pg_namespace.oid = pg_stat_last_operation.objid + where pg_namespace.nspname = 'bfv_meta_track'; \ No newline at end of file