mirror of https://github.com/citusdata/citus.git
Undistribute table when cascade_via_foreign_keys=true even if rel has no fkeys (#4516)
If relation is not involved in any foreign key relationships, foreign key graph would not return any relations for given relationId as expected. But even if it's the case, we should still undistribute the table itself.pull/4512/head
parent
4d204320d3
commit
787ed643dd
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue