diff --git a/src/backend/distributed/utils/resource_lock.c b/src/backend/distributed/utils/resource_lock.c index 167bd2b12..eff04d4c9 100644 --- a/src/backend/distributed/utils/resource_lock.c +++ b/src/backend/distributed/utils/resource_lock.c @@ -1357,7 +1357,11 @@ AcquireDistributedLockOnRelations(List *relationList, LOCKMODE lockMode, uint32 (void *) lockRelationRecord); } - if ((configs & DIST_LOCK_REFERENCING_TABLES) > 0) + char relkind = get_rel_relkind(relationId); + bool relationCanBeReferenced = (relkind == RELKIND_RELATION || + relkind == RELKIND_PARTITIONED_TABLE); + if (relationCanBeReferenced && + (configs & DIST_LOCK_REFERENCING_TABLES) > 0) { CitusTableCacheEntry *cacheEntry = GetCitusTableCacheEntry(relationId); Assert(cacheEntry != NULL); diff --git a/src/test/regress/expected/multi_truncate.out b/src/test/regress/expected/multi_truncate.out index 5553a0ecd..9b47237ea 100644 --- a/src/test/regress/expected/multi_truncate.out +++ b/src/test/regress/expected/multi_truncate.out @@ -522,6 +522,18 @@ SELECT truncate_local_data_after_distributing_table('t1'); (1 row) ALTER TABLE t1 VALIDATE CONSTRAINT t1_a_check; +CREATE TABLE tbl(a INT); +SELECT create_distributed_table('tbl', 'a'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + +CREATE VIEW vw AS SELECT * FROM tbl; +-- throws an error because vw is not a table +TRUNCATE TABLE tbl, vw CASCADE; +ERROR: "vw" is not a table +SET client_min_messages TO ERROR; DROP VIEW table_sizes; DROP TABLE t1; DROP SCHEMA multi_truncate CASCADE; diff --git a/src/test/regress/sql/multi_truncate.sql b/src/test/regress/sql/multi_truncate.sql index 1844dc8d2..a0529597b 100644 --- a/src/test/regress/sql/multi_truncate.sql +++ b/src/test/regress/sql/multi_truncate.sql @@ -304,6 +304,15 @@ ALTER TABLE t1 VALIDATE CONSTRAINT t1_a_check; SELECT truncate_local_data_after_distributing_table('t1'); ALTER TABLE t1 VALIDATE CONSTRAINT t1_a_check; +CREATE TABLE tbl(a INT); +SELECT create_distributed_table('tbl', 'a'); +CREATE VIEW vw AS SELECT * FROM tbl; + +-- throws an error because vw is not a table +TRUNCATE TABLE tbl, vw CASCADE; + +SET client_min_messages TO ERROR; + DROP VIEW table_sizes; DROP TABLE t1; DROP SCHEMA multi_truncate CASCADE;