diff --git a/src/backend/distributed/commands/alter_table.c b/src/backend/distributed/commands/alter_table.c index 9a27c8f3c..161a0980e 100644 --- a/src/backend/distributed/commands/alter_table.c +++ b/src/backend/distributed/commands/alter_table.c @@ -479,7 +479,8 @@ AlterTableSetAccessMethod(TableConversionParameters *params) TableConversionReturn * ConvertTable(TableConversionState *con) { - if (con->conversionType == UNDISTRIBUTE_TABLE && con->cascadeViaForeignKeys) + if (con->conversionType == UNDISTRIBUTE_TABLE && con->cascadeViaForeignKeys && + (TableReferencing(con->relationId) || TableReferenced(con->relationId))) { CascadeOperationForConnectedRelations(con->relationId, ExclusiveLock, CASCADE_FKEY_UNDISTRIBUTE_TABLE); diff --git a/src/test/regress/expected/undistribute_table_cascade.out b/src/test/regress/expected/undistribute_table_cascade.out index 269dddc16..6db239227 100644 --- a/src/test/regress/expected/undistribute_table_cascade.out +++ b/src/test/regress/expected/undistribute_table_cascade.out @@ -493,6 +493,26 @@ BEGIN; t (1 row) +ROLLBACK; +BEGIN; + ALTER TABLE reference_table_2 DROP CONSTRAINT fkey_7; + -- since now citus_local_table_2 has no foreign keys, show that + -- cascade_via_foreign_keys option still works fine + SELECT undistribute_table('citus_local_table_2', cascade_via_foreign_keys=>true); + undistribute_table +--------------------------------------------------------------------- + +(1 row) + + SELECT COUNT(*)=0 FROM pg_dist_partition, pg_tables + WHERE tablename=logicalrelid::regclass::text AND + schemaname='undistribute_table_cascade' AND + tablename='citus_local_table_2'; + ?column? +--------------------------------------------------------------------- + t +(1 row) + ROLLBACK; CREATE SCHEMA "bad!schemaName"; CREATE TABLE "bad!schemaName"."LocalTabLE.1!?!"(col_1 INT UNIQUE); diff --git a/src/test/regress/sql/undistribute_table_cascade.sql b/src/test/regress/sql/undistribute_table_cascade.sql index 20d43ead0..e1ac2fccf 100644 --- a/src/test/regress/sql/undistribute_table_cascade.sql +++ b/src/test/regress/sql/undistribute_table_cascade.sql @@ -337,6 +337,19 @@ BEGIN; tablename LIKE 'partitioned_table_%'; ROLLBACK; +BEGIN; + ALTER TABLE reference_table_2 DROP CONSTRAINT fkey_7; + + -- since now citus_local_table_2 has no foreign keys, show that + -- cascade_via_foreign_keys option still works fine + SELECT undistribute_table('citus_local_table_2', cascade_via_foreign_keys=>true); + + SELECT COUNT(*)=0 FROM pg_dist_partition, pg_tables + WHERE tablename=logicalrelid::regclass::text AND + schemaname='undistribute_table_cascade' AND + tablename='citus_local_table_2'; +ROLLBACK; + CREATE SCHEMA "bad!schemaName"; CREATE TABLE "bad!schemaName"."LocalTabLE.1!?!"(col_1 INT UNIQUE);