diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index b95cbad8f..afdf5c21a 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -3596,6 +3596,15 @@ InvalidateForeignRelationGraphCacheCallback(Datum argument, Oid relationId) void InvalidateForeignKeyGraph(void) { + if (!CitusHasBeenLoaded()) + { + /* + * We should not try to invalidate foreign key graph + * if citus is not loaded. + */ + return; + } + CitusInvalidateRelcacheByRelid(DistColocationRelationId()); /* bump command counter to force invalidation to take effect */ diff --git a/src/test/regress/expected/multi_drop_extension.out b/src/test/regress/expected/multi_drop_extension.out index 7a978cff9..afa9a4ed2 100644 --- a/src/test/regress/expected/multi_drop_extension.out +++ b/src/test/regress/expected/multi_drop_extension.out @@ -18,6 +18,36 @@ SET client_min_messages TO 'WARNING'; DROP FUNCTION pg_catalog.master_create_worker_shards; DROP EXTENSION citus CASCADE; RESET client_min_messages; +BEGIN; + SET client_min_messages TO ERROR; + SET search_path TO public; + CREATE EXTENSION citus; + SET citus.replicate_reference_tables_on_activate TO OFF; + SELECT 1 FROM master_add_node('localhost', :master_port, groupId => 0); + ?column? +--------------------------------------------------------------------- + 1 +(1 row) + + create table l1 (a int unique); + SELECT create_reference_table('l1'); + create_reference_table +--------------------------------------------------------------------- + +(1 row) + + create schema other_schema; + create table other_schema.l3 (a int); + select create_reference_table ('other_schema.l3'); + create_reference_table +--------------------------------------------------------------------- + +(1 row) + + alter table other_schema.l3 add constraint fkey foreign key (a) references l1(a); + -- show that works fine + drop schema public cascade; +ROLLBACK; CREATE EXTENSION citus; -- this function is dropped in Citus10, added here for tests CREATE OR REPLACE FUNCTION pg_catalog.master_create_worker_shards(table_name text, shard_count integer, diff --git a/src/test/regress/sql/multi_drop_extension.sql b/src/test/regress/sql/multi_drop_extension.sql index 2fe31e73f..8112ffef1 100644 --- a/src/test/regress/sql/multi_drop_extension.sql +++ b/src/test/regress/sql/multi_drop_extension.sql @@ -19,6 +19,28 @@ DROP FUNCTION pg_catalog.master_create_worker_shards; DROP EXTENSION citus CASCADE; RESET client_min_messages; +BEGIN; + SET client_min_messages TO ERROR; + SET search_path TO public; + CREATE EXTENSION citus; + + -- not wait for replicating reference tables from other test files + SET citus.replicate_reference_tables_on_activate TO OFF; + SELECT 1 FROM master_add_node('localhost', :master_port, groupId => 0); + + create table l1 (a int unique); + SELECT create_reference_table('l1'); + + create schema other_schema; + create table other_schema.l3 (a int); + select create_reference_table ('other_schema.l3'); + + alter table other_schema.l3 add constraint fkey foreign key (a) references l1(a); + + -- show that works fine + drop schema public cascade; +ROLLBACK; + CREATE EXTENSION citus; -- this function is dropped in Citus10, added here for tests CREATE OR REPLACE FUNCTION pg_catalog.master_create_worker_shards(table_name text, shard_count integer,