diff --git a/citus.control b/citus.control index 6b0aba7f5..fa182b2aa 100644 --- a/citus.control +++ b/citus.control @@ -1,6 +1,6 @@ # Citus extension comment = 'Citus distributed database' -default_version = '7.5-6' +default_version = '7.5-7' module_pathname = '$libdir/citus' relocatable = false schema = pg_catalog diff --git a/src/backend/distributed/Makefile b/src/backend/distributed/Makefile index 0bacc0c62..8a6fbb8dd 100644 --- a/src/backend/distributed/Makefile +++ b/src/backend/distributed/Makefile @@ -16,7 +16,7 @@ EXTVERSIONS = 5.0 5.0-1 5.0-2 \ 7.2-1 7.2-2 7.2-3 \ 7.3-1 7.3-2 7.3-3 \ 7.4-1 7.4-2 7.4-3 \ - 7.5-1 7.5-2 7.5-3 7.5-4 7.5-5 7.5-6 + 7.5-1 7.5-2 7.5-3 7.5-4 7.5-5 7.5-6 7.5-7 # All citus--*.sql files in the source directory DATA = $(patsubst $(citus_abs_srcdir)/%.sql,%.sql,$(wildcard $(citus_abs_srcdir)/$(EXTENSION)--*--*.sql)) @@ -212,6 +212,8 @@ $(EXTENSION)--7.5-5.sql: $(EXTENSION)--7.5-4.sql $(EXTENSION)--7.5-4--7.5-5.sql cat $^ > $@ $(EXTENSION)--7.5-6.sql: $(EXTENSION)--7.5-5.sql $(EXTENSION)--7.5-5--7.5-6.sql cat $^ > $@ +$(EXTENSION)--7.5-7.sql: $(EXTENSION)--7.5-6.sql $(EXTENSION)--7.5-6--7.5-7.sql + cat $^ > $@ NO_PGXS = 1 diff --git a/src/backend/distributed/citus--7.5-6--7.5-7.sql b/src/backend/distributed/citus--7.5-6--7.5-7.sql new file mode 100644 index 000000000..60efa7a75 --- /dev/null +++ b/src/backend/distributed/citus--7.5-6--7.5-7.sql @@ -0,0 +1,35 @@ +/* citus--7.5-6--7.5-7 */ +SET search_path = 'pg_catalog'; + +CREATE FUNCTION pg_catalog.poolinfo_valid(text) + RETURNS boolean + LANGUAGE C STRICT + AS 'MODULE_PATHNAME', $$poolinfo_valid$$; +COMMENT ON FUNCTION pg_catalog.poolinfo_valid(text) IS 'returns whether a poolinfo is valid'; + +CREATE TABLE citus.pg_dist_poolinfo ( + nodeid integer PRIMARY KEY + REFERENCES pg_dist_node(nodeid) + ON DELETE CASCADE, + poolinfo text NOT NULL + CONSTRAINT poolinfo_valid + CHECK (poolinfo_valid(poolinfo)) +); + +ALTER TABLE citus.pg_dist_poolinfo SET SCHEMA pg_catalog; +GRANT SELECT ON pg_catalog.pg_dist_poolinfo TO public; + +ALTER FUNCTION master_dist_authinfo_cache_invalidate() +RENAME TO master_conninfo_cache_invalidate; + +CREATE TRIGGER dist_poolinfo_cache_invalidate + AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE + ON pg_catalog.pg_dist_poolinfo + FOR EACH STATEMENT EXECUTE PROCEDURE master_conninfo_cache_invalidate(); + +CREATE TRIGGER dist_poolinfo_task_tracker_cache_invalidate + AFTER INSERT OR UPDATE OR DELETE OR TRUNCATE + ON pg_catalog.pg_dist_poolinfo + FOR EACH STATEMENT EXECUTE PROCEDURE task_tracker_conninfo_cache_invalidate(); + +RESET search_path; diff --git a/src/backend/distributed/citus.control b/src/backend/distributed/citus.control index 6b0aba7f5..fa182b2aa 100644 --- a/src/backend/distributed/citus.control +++ b/src/backend/distributed/citus.control @@ -1,6 +1,6 @@ # Citus extension comment = 'Citus distributed database' -default_version = '7.5-6' +default_version = '7.5-7' module_pathname = '$libdir/citus' relocatable = false schema = pg_catalog diff --git a/src/backend/distributed/utils/metadata_cache.c b/src/backend/distributed/utils/metadata_cache.c index 5cdfc64ba..6393c1372 100644 --- a/src/backend/distributed/utils/metadata_cache.c +++ b/src/backend/distributed/utils/metadata_cache.c @@ -222,6 +222,7 @@ PG_FUNCTION_INFO_V1(master_dist_local_group_cache_invalidate); PG_FUNCTION_INFO_V1(master_dist_authinfo_cache_invalidate); PG_FUNCTION_INFO_V1(role_exists); PG_FUNCTION_INFO_V1(authinfo_valid); +PG_FUNCTION_INFO_V1(poolinfo_valid); /* @@ -3612,3 +3613,20 @@ authinfo_valid(PG_FUNCTION_ARGS) "with Citus, please contact us at " "https://citusdata.com/about/contact_us"))); } + + +/* + * poolinfo_valid is a check constraint which errors on all rows, intended for + * use in prohibiting writes to pg_dist_poolinfo in Citus Community. + */ +Datum +poolinfo_valid(PG_FUNCTION_ARGS) +{ + ereport(ERROR, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot write to pg_dist_poolinfo"), + errdetail("Citus Community Edition does not support the use of " + "pooler options."), + errhint("To learn more about using advanced pooling schemes " + "with Citus, please contact us at " + "https://citusdata.com/about/contact_us"))); +} diff --git a/src/include/distributed/metadata_sync.h b/src/include/distributed/metadata_sync.h index c7e63c33f..5a3b09c46 100644 --- a/src/include/distributed/metadata_sync.h +++ b/src/include/distributed/metadata_sync.h @@ -38,7 +38,7 @@ extern char * PlacementUpsertCommand(uint64 shardId, uint64 placementId, int sha extern void CreateTableMetadataOnWorkers(Oid relationId); -#define DELETE_ALL_NODES "TRUNCATE pg_dist_node" +#define DELETE_ALL_NODES "TRUNCATE pg_dist_node CASCADE" #define REMOVE_ALL_CLUSTERED_TABLES_COMMAND \ "SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition" #define DISABLE_DDL_PROPAGATION "SET citus.enable_ddl_propagation TO 'off'" diff --git a/src/test/regress/expected/multi_extension.out b/src/test/regress/expected/multi_extension.out index 07cedcf9b..8162c1db2 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -142,6 +142,7 @@ ALTER EXTENSION citus UPDATE TO '7.5-3'; ALTER EXTENSION citus UPDATE TO '7.5-4'; ALTER EXTENSION citus UPDATE TO '7.5-5'; ALTER EXTENSION citus UPDATE TO '7.5-6'; +ALTER EXTENSION citus UPDATE TO '7.5-7'; -- show running version SHOW citus.version; citus.version diff --git a/src/test/regress/expected/multi_metadata_sync.out b/src/test/regress/expected/multi_metadata_sync.out index 7c36c5db0..f965f0a1f 100644 --- a/src/test/regress/expected/multi_metadata_sync.out +++ b/src/test/regress/expected/multi_metadata_sync.out @@ -30,7 +30,7 @@ SELECT unnest(master_metadata_snapshot()); unnest ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition - TRUNCATE pg_dist_node + TRUNCATE pg_dist_node CASCADE INSERT INTO pg_dist_node (nodeid, groupid, nodename, nodeport, noderack, hasmetadata, isactive, noderole, nodecluster) VALUES (1, 1, 'localhost', 57637, 'default', FALSE, TRUE, 'primary'::noderole, 'default'),(2, 2, 'localhost', 57638, 'default', FALSE, TRUE, 'primary'::noderole, 'default') (3 rows) @@ -56,7 +56,7 @@ SELECT unnest(master_metadata_snapshot()); unnest -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition - TRUNCATE pg_dist_node + TRUNCATE pg_dist_node CASCADE INSERT INTO pg_dist_node (nodeid, groupid, nodename, nodeport, noderack, hasmetadata, isactive, noderole, nodecluster) VALUES (1, 1, 'localhost', 57637, 'default', FALSE, TRUE, 'primary'::noderole, 'default'),(2, 2, 'localhost', 57638, 'default', FALSE, TRUE, 'primary'::noderole, 'default') SELECT worker_apply_sequence_command ('CREATE SEQUENCE IF NOT EXISTS mx_test_table_col_3_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE') ALTER SEQUENCE public.mx_test_table_col_3_seq OWNER TO postgres @@ -75,7 +75,7 @@ SELECT unnest(master_metadata_snapshot()); unnest -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition - TRUNCATE pg_dist_node + TRUNCATE pg_dist_node CASCADE INSERT INTO pg_dist_node (nodeid, groupid, nodename, nodeport, noderack, hasmetadata, isactive, noderole, nodecluster) VALUES (1, 1, 'localhost', 57637, 'default', FALSE, TRUE, 'primary'::noderole, 'default'),(2, 2, 'localhost', 57638, 'default', FALSE, TRUE, 'primary'::noderole, 'default') SELECT worker_apply_sequence_command ('CREATE SEQUENCE IF NOT EXISTS mx_test_table_col_3_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE') ALTER SEQUENCE public.mx_test_table_col_3_seq OWNER TO postgres @@ -98,7 +98,7 @@ SELECT unnest(master_metadata_snapshot()); unnest ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition - TRUNCATE pg_dist_node + TRUNCATE pg_dist_node CASCADE INSERT INTO pg_dist_node (nodeid, groupid, nodename, nodeport, noderack, hasmetadata, isactive, noderole, nodecluster) VALUES (1, 1, 'localhost', 57637, 'default', FALSE, TRUE, 'primary'::noderole, 'default'),(2, 2, 'localhost', 57638, 'default', FALSE, TRUE, 'primary'::noderole, 'default') CREATE SCHEMA IF NOT EXISTS mx_testing_schema AUTHORIZATION postgres SELECT worker_apply_sequence_command ('CREATE SEQUENCE IF NOT EXISTS mx_testing_schema.mx_test_table_col_3_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE') @@ -127,7 +127,7 @@ SELECT unnest(master_metadata_snapshot()); unnest ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition - TRUNCATE pg_dist_node + TRUNCATE pg_dist_node CASCADE INSERT INTO pg_dist_node (nodeid, groupid, nodename, nodeport, noderack, hasmetadata, isactive, noderole, nodecluster) VALUES (1, 1, 'localhost', 57637, 'default', FALSE, TRUE, 'primary'::noderole, 'default'),(2, 2, 'localhost', 57638, 'default', FALSE, TRUE, 'primary'::noderole, 'default') CREATE SCHEMA IF NOT EXISTS mx_testing_schema AUTHORIZATION postgres SELECT worker_apply_sequence_command ('CREATE SEQUENCE IF NOT EXISTS mx_testing_schema.mx_test_table_col_3_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE') @@ -149,7 +149,7 @@ SELECT unnest(master_metadata_snapshot()); unnest ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ SELECT worker_drop_distributed_table(logicalrelid) FROM pg_dist_partition - TRUNCATE pg_dist_node + TRUNCATE pg_dist_node CASCADE INSERT INTO pg_dist_node (nodeid, groupid, nodename, nodeport, noderack, hasmetadata, isactive, noderole, nodecluster) VALUES (1, 1, 'localhost', 57637, 'default', FALSE, TRUE, 'primary'::noderole, 'default'),(2, 2, 'localhost', 57638, 'default', FALSE, TRUE, 'primary'::noderole, 'default') CREATE SCHEMA IF NOT EXISTS mx_testing_schema AUTHORIZATION postgres SELECT worker_apply_sequence_command ('CREATE SEQUENCE IF NOT EXISTS mx_testing_schema.mx_test_table_col_3_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START WITH 1 NO CYCLE') diff --git a/src/test/regress/sql/multi_extension.sql b/src/test/regress/sql/multi_extension.sql index 5cfeeb947..5259cc9c4 100644 --- a/src/test/regress/sql/multi_extension.sql +++ b/src/test/regress/sql/multi_extension.sql @@ -142,6 +142,7 @@ ALTER EXTENSION citus UPDATE TO '7.5-3'; ALTER EXTENSION citus UPDATE TO '7.5-4'; ALTER EXTENSION citus UPDATE TO '7.5-5'; ALTER EXTENSION citus UPDATE TO '7.5-6'; +ALTER EXTENSION citus UPDATE TO '7.5-7'; -- show running version SHOW citus.version; diff --git a/windows/include/citus_version.h b/windows/include/citus_version.h index 11a45f8f0..21b0ca218 100644 --- a/windows/include/citus_version.h +++ b/windows/include/citus_version.h @@ -5,7 +5,7 @@ #define CITUS_EDITION "community" /* Extension version expected by this Citus build */ -#define CITUS_EXTENSIONVERSION "7.5-3" +#define CITUS_EXTENSIONVERSION "7.5-7" /* Citus major version as a string */ #define CITUS_MAJORVERSION "7.5"