From 1067a0980b9cd6992d5b0d27f5008cfbbb4c4096 Mon Sep 17 00:00:00 2001 From: Halil Ozan Akgul Date: Tue, 11 Jul 2023 11:38:15 +0300 Subject: [PATCH] Move SQL file changes for citus_shard_sizes fixes into the new 11.3-2 version --- .../distributed/sql/citus--11.3-1--11.3-2.sql | 9 +++ ...--12.0-1.sql => citus--11.3-2--12.0-1.sql} | 6 -- .../sql/downgrades/citus--11.3-2--11.3-1.sql | 13 +++++ ...--11.3-1.sql => citus--12.0-1--11.3-2.sql} | 10 +--- .../{12.0-1.sql => 11.3-2.sql} | 0 .../sql/udfs/citus_shards/11.3-2.sql | 46 ++++++++++++++++ .../sql/udfs/citus_tables/11.3-2.sql | 55 +++++++++++++++++++ 7 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 src/backend/distributed/sql/citus--11.3-1--11.3-2.sql rename src/backend/distributed/sql/{citus--11.3-1--12.0-1.sql => citus--11.3-2--12.0-1.sql} (90%) create mode 100644 src/backend/distributed/sql/downgrades/citus--11.3-2--11.3-1.sql rename src/backend/distributed/sql/downgrades/{citus--12.0-1--11.3-1.sql => citus--12.0-1--11.3-2.sql} (85%) rename src/backend/distributed/sql/udfs/citus_shard_sizes/{12.0-1.sql => 11.3-2.sql} (100%) create mode 100644 src/backend/distributed/sql/udfs/citus_shards/11.3-2.sql create mode 100644 src/backend/distributed/sql/udfs/citus_tables/11.3-2.sql diff --git a/src/backend/distributed/sql/citus--11.3-1--11.3-2.sql b/src/backend/distributed/sql/citus--11.3-1--11.3-2.sql new file mode 100644 index 00000000000..e7f0864f118 --- /dev/null +++ b/src/backend/distributed/sql/citus--11.3-1--11.3-2.sql @@ -0,0 +1,9 @@ +DROP VIEW citus_shards; +DROP VIEW IF EXISTS pg_catalog.citus_tables; +DROP VIEW IF EXISTS public.citus_tables; +DROP FUNCTION citus_shard_sizes; + +#include "udfs/citus_shard_sizes/11.3-2.sql" + +#include "udfs/citus_shards/11.3-2.sql" +#include "udfs/citus_tables/11.3-2.sql" diff --git a/src/backend/distributed/sql/citus--11.3-1--12.0-1.sql b/src/backend/distributed/sql/citus--11.3-2--12.0-1.sql similarity index 90% rename from src/backend/distributed/sql/citus--11.3-1--12.0-1.sql rename to src/backend/distributed/sql/citus--11.3-2--12.0-1.sql index fac95dbd4b6..64a1deb03a8 100644 --- a/src/backend/distributed/sql/citus--11.3-1--12.0-1.sql +++ b/src/backend/distributed/sql/citus--11.3-2--12.0-1.sql @@ -24,12 +24,6 @@ GRANT SELECT ON pg_catalog.pg_dist_schema TO public; #include "udfs/citus_internal_unregister_tenant_schema_globally/12.0-1.sql" #include "udfs/citus_drop_trigger/12.0-1.sql" -DROP VIEW citus_shards; -DROP VIEW IF EXISTS pg_catalog.citus_tables; -DROP VIEW IF EXISTS public.citus_tables; -DROP FUNCTION citus_shard_sizes; -#include "udfs/citus_shard_sizes/12.0-1.sql" - #include "udfs/citus_tables/12.0-1.sql" #include "udfs/citus_shards/12.0-1.sql" diff --git a/src/backend/distributed/sql/downgrades/citus--11.3-2--11.3-1.sql b/src/backend/distributed/sql/downgrades/citus--11.3-2--11.3-1.sql new file mode 100644 index 00000000000..78dacd59a74 --- /dev/null +++ b/src/backend/distributed/sql/downgrades/citus--11.3-2--11.3-1.sql @@ -0,0 +1,13 @@ +DROP VIEW IF EXISTS public.citus_tables; +DROP VIEW IF EXISTS pg_catalog.citus_tables; + +DROP VIEW pg_catalog.citus_shards; +DROP FUNCTION pg_catalog.citus_shard_sizes; +#include "../udfs/citus_shard_sizes/10.0-1.sql" +-- citus_shards/11.1-1.sql tries to create citus_shards in pg_catalog but it is not allowed. +-- Here we use citus_shards/10.0-1.sql to properly create the view in citus schema and +-- then alter it to pg_catalog, so citus_shards/11.1-1.sql can REPLACE it without any errors. +#include "../udfs/citus_shards/10.0-1.sql" + +#include "../udfs/citus_tables/11.1-1.sql" +#include "../udfs/citus_shards/11.1-1.sql" diff --git a/src/backend/distributed/sql/downgrades/citus--12.0-1--11.3-1.sql b/src/backend/distributed/sql/downgrades/citus--12.0-1--11.3-2.sql similarity index 85% rename from src/backend/distributed/sql/downgrades/citus--12.0-1--11.3-1.sql rename to src/backend/distributed/sql/downgrades/citus--12.0-1--11.3-2.sql index c391837f4b0..b410a406930 100644 --- a/src/backend/distributed/sql/downgrades/citus--12.0-1--11.3-1.sql +++ b/src/backend/distributed/sql/downgrades/citus--12.0-1--11.3-2.sql @@ -51,15 +51,9 @@ DROP VIEW IF EXISTS public.citus_tables; DROP VIEW IF EXISTS pg_catalog.citus_tables; DROP VIEW pg_catalog.citus_shards; -DROP FUNCTION pg_catalog.citus_shard_sizes; -#include "../udfs/citus_shard_sizes/10.0-1.sql" --- citus_shards/11.1-1.sql tries to create citus_shards in pg_catalog but it is not allowed. --- Here we use citus_shards/10.0-1.sql to properly create the view in citus schema and --- then alter it to pg_catalog, so citus_shards/11.1-1.sql can REPLACE it without any errors. -#include "../udfs/citus_shards/10.0-1.sql" -#include "../udfs/citus_tables/11.1-1.sql" -#include "../udfs/citus_shards/11.1-1.sql" +#include "../udfs/citus_tables/11.3-2.sql" +#include "../udfs/citus_shards/11.3-2.sql" DROP TABLE pg_catalog.pg_dist_schema; diff --git a/src/backend/distributed/sql/udfs/citus_shard_sizes/12.0-1.sql b/src/backend/distributed/sql/udfs/citus_shard_sizes/11.3-2.sql similarity index 100% rename from src/backend/distributed/sql/udfs/citus_shard_sizes/12.0-1.sql rename to src/backend/distributed/sql/udfs/citus_shard_sizes/11.3-2.sql diff --git a/src/backend/distributed/sql/udfs/citus_shards/11.3-2.sql b/src/backend/distributed/sql/udfs/citus_shards/11.3-2.sql new file mode 100644 index 00000000000..3b08a546373 --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_shards/11.3-2.sql @@ -0,0 +1,46 @@ +CREATE OR REPLACE VIEW citus.citus_shards AS +SELECT + pg_dist_shard.logicalrelid AS table_name, + pg_dist_shard.shardid, + shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) as shard_name, + CASE WHEN partkey IS NOT NULL THEN 'distributed' WHEN repmodel = 't' THEN 'reference' ELSE 'local' END AS citus_table_type, + colocationid AS colocation_id, + pg_dist_node.nodename, + pg_dist_node.nodeport, + size as shard_size +FROM + pg_dist_shard +JOIN + pg_dist_placement +ON + pg_dist_shard.shardid = pg_dist_placement.shardid +JOIN + pg_dist_node +ON + pg_dist_placement.groupid = pg_dist_node.groupid +JOIN + pg_dist_partition +ON + pg_dist_partition.logicalrelid = pg_dist_shard.logicalrelid +LEFT JOIN + (SELECT shard_id, max(size) as size from citus_shard_sizes() GROUP BY shard_id) as shard_sizes +ON + pg_dist_shard.shardid = shard_sizes.shard_id +WHERE + pg_dist_placement.shardstate = 1 +AND + -- filter out tables owned by extensions + pg_dist_partition.logicalrelid NOT IN ( + SELECT + objid + FROM + pg_depend + WHERE + classid = 'pg_class'::regclass AND refclassid = 'pg_extension'::regclass AND deptype = 'e' + ) +ORDER BY + pg_dist_shard.logicalrelid::text, shardid +; + +ALTER VIEW citus.citus_shards SET SCHEMA pg_catalog; +GRANT SELECT ON pg_catalog.citus_shards TO public; diff --git a/src/backend/distributed/sql/udfs/citus_tables/11.3-2.sql b/src/backend/distributed/sql/udfs/citus_tables/11.3-2.sql new file mode 100644 index 00000000000..ead0b49233c --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_tables/11.3-2.sql @@ -0,0 +1,55 @@ +DO $$ +declare +citus_tables_create_query text; +BEGIN +citus_tables_create_query=$CTCQ$ + CREATE OR REPLACE VIEW %I.citus_tables AS + SELECT + logicalrelid AS table_name, + CASE WHEN partkey IS NOT NULL THEN 'distributed' ELSE + CASE when repmodel = 't' THEN 'reference' ELSE 'local' END + END AS citus_table_type, + coalesce(column_to_column_name(logicalrelid, partkey), '') AS distribution_column, + colocationid AS colocation_id, + pg_size_pretty(table_sizes.table_size) AS table_size, + (select count(*) from pg_dist_shard where logicalrelid = p.logicalrelid) AS shard_count, + pg_get_userbyid(relowner) AS table_owner, + amname AS access_method + FROM + pg_dist_partition p + JOIN + pg_class c ON (p.logicalrelid = c.oid) + LEFT JOIN + pg_am a ON (a.oid = c.relam) + JOIN + ( + SELECT ds.logicalrelid AS table_id, SUM(css.size) AS table_size + FROM citus_shard_sizes() css, pg_dist_shard ds + WHERE css.shard_id = ds.shardid + GROUP BY ds.logicalrelid + ) table_sizes ON (table_sizes.table_id = p.logicalrelid) + WHERE + -- filter out tables owned by extensions + logicalrelid NOT IN ( + SELECT + objid + FROM + pg_depend + WHERE + classid = 'pg_class'::regclass AND refclassid = 'pg_extension'::regclass AND deptype = 'e' + ) + ORDER BY + logicalrelid::text; +$CTCQ$; + +IF EXISTS (SELECT 1 FROM pg_namespace WHERE nspname = 'public') THEN + EXECUTE format(citus_tables_create_query, 'public'); + GRANT SELECT ON public.citus_tables TO public; +ELSE + EXECUTE format(citus_tables_create_query, 'citus'); + ALTER VIEW citus.citus_tables SET SCHEMA pg_catalog; + GRANT SELECT ON pg_catalog.citus_tables TO public; +END IF; + +END; +$$;