From c2a2477824d0eb9ab0457ee899c5679da568555d Mon Sep 17 00:00:00 2001 From: chenxiaobin19 <1025221611@qq.com> Date: Wed, 3 Aug 2022 20:23:58 +0800 Subject: [PATCH] skip recycle relation when subscribe --- src/common/backend/catalog/pg_publication.cpp | 7 +++++++ src/test/regress/input/publication.source | 13 +++++++++++++ src/test/regress/output/publication.source | 18 ++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/common/backend/catalog/pg_publication.cpp b/src/common/backend/catalog/pg_publication.cpp index 897080008..4d45297c7 100644 --- a/src/common/backend/catalog/pg_publication.cpp +++ b/src/common/backend/catalog/pg_publication.cpp @@ -43,6 +43,8 @@ #include "utils/rel.h" #include "utils/syscache.h" +#include "storage/tcap.h" + /* check if namespace is internal schema, internal schema doesn't need publish */ static inline bool IsInternalSchema(Oid relnamespace) { @@ -177,6 +179,11 @@ static bool is_publishable_class(Oid relid, HeapTuple tuple, Relation rel) return false; } + /* skip recycle relation */ + if (TrIsRefRbObjectEx(RelationRelationId, relid, NameStr(reltuple->relname))) { + return false; + } + /* check whether is row table */ bool isRowTable = true; if (rel != NULL) { diff --git a/src/test/regress/input/publication.source b/src/test/regress/input/publication.source index 0a981470e..c1a6cc100 100644 --- a/src/test/regress/input/publication.source +++ b/src/test/regress/input/publication.source @@ -114,3 +114,16 @@ select pg_get_replica_identity_index('replica_test'); drop table replica_test; \! @abs_bindir@/gs_guc reload -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object" > /dev/null 2>&1 + +-- skip recycle object +\! @abs_bindir@/gs_guc reload -D @abs_srcdir@/tmp_check/datanode1/ -c "enable_recyclebin = on" > /dev/null 2>&1 +create table t_ustore_test1(a int) with (storage_type = ustore); +drop table t_ustore_test1; +select count(*) from pg_class where relname like 'BIN$%'; + +create publication pub_test for all tables; +select * from pg_publication_tables where tablename like 'BIN$%'; + +purge table t_ustore_test1; + +\! @abs_bindir@/gs_guc reload -D @abs_srcdir@/tmp_check/datanode1/ -c "enable_recyclebin = off" > /dev/null 2>&1 diff --git a/src/test/regress/output/publication.source b/src/test/regress/output/publication.source index f09425f09..b7d10a706 100644 --- a/src/test/regress/output/publication.source +++ b/src/test/regress/output/publication.source @@ -246,3 +246,21 @@ select pg_get_replica_identity_index('replica_test'); drop table replica_test; \! @abs_bindir@/gs_guc reload -D @abs_srcdir@/tmp_check/datanode1/ -c "audit_system_object" > /dev/null 2>&1 +-- skip recycle object +\! @abs_bindir@/gs_guc reload -D @abs_srcdir@/tmp_check/datanode1/ -c "enable_recyclebin = on" > /dev/null 2>&1 +create table t_ustore_test1(a int) with (storage_type = ustore); +drop table t_ustore_test1; +select count(*) from pg_class where relname like 'BIN$%'; + count +------- + 1 +(1 row) + +create publication pub_test for all tables; +select * from pg_publication_tables where tablename like 'BIN$%'; + pubname | schemaname | tablename +---------+------------+----------- +(0 rows) + +purge table t_ustore_test1; +\! @abs_bindir@/gs_guc reload -D @abs_srcdir@/tmp_check/datanode1/ -c "enable_recyclebin = off" > /dev/null 2>&1