From 1fb970224eb6ec0f0e067f54c75c287b61b7349a Mon Sep 17 00:00:00 2001 From: Nils Dijk Date: Wed, 23 Feb 2022 15:53:26 +0100 Subject: [PATCH] Fix: partitioned index dependencies (#5741) #5685 introduced the resolution of dependencies for indices. This missed support for indices on partitioned tables. This change adds support for partitioned indices to the dependency resolution code. --- .../distributed/commands/dependencies.c | 3 ++- src/backend/distributed/metadata/dependency.c | 3 ++- src/test/regress/expected/text_search.out | 20 +++++++++++++++++++ src/test/regress/sql/text_search.sql | 17 ++++++++++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/src/backend/distributed/commands/dependencies.c b/src/backend/distributed/commands/dependencies.c index 84e875602..c1bd4c340 100644 --- a/src/backend/distributed/commands/dependencies.c +++ b/src/backend/distributed/commands/dependencies.c @@ -247,7 +247,8 @@ GetDependencyCreateDDLCommands(const ObjectAddress *dependency) * The commands will be added to both shards and metadata tables via the table * creation commands. */ - if (relKind == RELKIND_INDEX) + if (relKind == RELKIND_INDEX || + relKind == RELKIND_PARTITIONED_INDEX) { return NIL; } diff --git a/src/backend/distributed/metadata/dependency.c b/src/backend/distributed/metadata/dependency.c index 2d1f67ad3..bb25e2b6b 100644 --- a/src/backend/distributed/metadata/dependency.c +++ b/src/backend/distributed/metadata/dependency.c @@ -722,7 +722,8 @@ SupportedDependencyByCitus(const ObjectAddress *address) relKind == RELKIND_PARTITIONED_TABLE || relKind == RELKIND_FOREIGN_TABLE || relKind == RELKIND_SEQUENCE || - relKind == RELKIND_INDEX) + relKind == RELKIND_INDEX || + relKind == RELKIND_PARTITIONED_INDEX) { return true; } diff --git a/src/test/regress/expected/text_search.out b/src/test/regress/expected/text_search.out index 1b4f652c1..a4af57051 100644 --- a/src/test/regress/expected/text_search.out +++ b/src/test/regress/expected/text_search.out @@ -484,6 +484,26 @@ SELECT create_distributed_table('t5', 'name'); (1 row) +-- make sure partial indices propagate their dependencies +-- first have a TEXT SEARCH CONFIGURATION that is not distributed +SET citus.enable_ddl_propagation TO off; +CREATE TEXT SEARCH CONFIGURATION partial_index_test_config ( parser = default ); +RESET citus.enable_ddl_propagation; +CREATE TABLE sensors( + measureid integer, + eventdatetime date, + measure_data jsonb, + name text, + PRIMARY KEY (measureid, eventdatetime, measure_data) +) PARTITION BY RANGE(eventdatetime); +CREATE TABLE sensors_a_partition PARTITION OF sensors FOR VALUES FROM ('2000-01-01') TO ('2020-01-01'); +CREATE INDEX sensors_search_name ON sensors USING gin (to_tsvector('partial_index_test_config'::regconfig, (COALESCE(name, ''::character varying))::text)); +SELECT create_distributed_table('sensors', 'measureid'); + create_distributed_table +--------------------------------------------------------------------- + +(1 row) + SET client_min_messages TO 'warning'; DROP SCHEMA text_search, text_search2, "Text Search Requiring Quote's" CASCADE; DROP ROLE text_search_owner; diff --git a/src/test/regress/sql/text_search.sql b/src/test/regress/sql/text_search.sql index 916644fd6..bb8254f0c 100644 --- a/src/test/regress/sql/text_search.sql +++ b/src/test/regress/sql/text_search.sql @@ -258,6 +258,23 @@ CREATE TABLE t5(id int, name text); CREATE INDEX t5_search_name ON t5 USING gin (to_tsvector('"Text Search Requiring Quote''s"."Quoted Config Name"'::regconfig, (COALESCE(name, ''::character varying))::text)); SELECT create_distributed_table('t5', 'name'); +-- make sure partial indices propagate their dependencies +-- first have a TEXT SEARCH CONFIGURATION that is not distributed +SET citus.enable_ddl_propagation TO off; +CREATE TEXT SEARCH CONFIGURATION partial_index_test_config ( parser = default ); +RESET citus.enable_ddl_propagation; + +CREATE TABLE sensors( + measureid integer, + eventdatetime date, + measure_data jsonb, + name text, + PRIMARY KEY (measureid, eventdatetime, measure_data) +) PARTITION BY RANGE(eventdatetime); +CREATE TABLE sensors_a_partition PARTITION OF sensors FOR VALUES FROM ('2000-01-01') TO ('2020-01-01'); +CREATE INDEX sensors_search_name ON sensors USING gin (to_tsvector('partial_index_test_config'::regconfig, (COALESCE(name, ''::character varying))::text)); +SELECT create_distributed_table('sensors', 'measureid'); + SET client_min_messages TO 'warning'; DROP SCHEMA text_search, text_search2, "Text Search Requiring Quote's" CASCADE; DROP ROLE text_search_owner;