mirror of https://github.com/citusdata/citus.git
Introduce 3 partitioned size udfs (#4899)
* Introduce 3 partitioned size udfs * Add tests for new partition size udfs * Fix type incompatibilities * Convert UDFs into pure sql functions * Fix function commentpull/4794/head
parent
fe5c985e1d
commit
e445e3d39c
|
@ -596,7 +596,8 @@ ShardIntervalsOnWorkerGroup(WorkerNode *workerNode, Oid relationId)
|
||||||
* size of multiple tables. Note that, different size functions supported by PG
|
* size of multiple tables. Note that, different size functions supported by PG
|
||||||
* are also supported by this function changing the size query type given as the
|
* are also supported by this function changing the size query type given as the
|
||||||
* last parameter to function. Depending on the sizeQueryType enum parameter, the
|
* last parameter to function. Depending on the sizeQueryType enum parameter, the
|
||||||
* generated query will be pg_relation_size or pg_total_relation_size.
|
* generated query will call one of the functions: pg_relation_size,
|
||||||
|
* pg_total_relation_size, pg_table_size and cstore_table_size.
|
||||||
*/
|
*/
|
||||||
StringInfo
|
StringInfo
|
||||||
GenerateSizeQueryOnMultiplePlacements(List *shardIntervalList,
|
GenerateSizeQueryOnMultiplePlacements(List *shardIntervalList,
|
||||||
|
|
|
@ -2,4 +2,7 @@
|
||||||
|
|
||||||
#include "../../columnar/sql/columnar--10.0-3--10.1-1.sql"
|
#include "../../columnar/sql/columnar--10.0-3--10.1-1.sql"
|
||||||
#include "udfs/create_distributed_table/10.1-1.sql";
|
#include "udfs/create_distributed_table/10.1-1.sql";
|
||||||
|
#include "udfs/worker_partitioned_relation_total_size/10.1-1.sql"
|
||||||
|
#include "udfs/worker_partitioned_relation_size/10.1-1.sql"
|
||||||
|
#include "udfs/worker_partitioned_table_size/10.1-1.sql"
|
||||||
#include "udfs/citus_finish_pg_upgrade/10.1-1.sql"
|
#include "udfs/citus_finish_pg_upgrade/10.1-1.sql"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
-- citus--10.1-1--10.0-2
|
-- citus--10.1-1--10.0-3
|
||||||
|
|
||||||
#include "../../../columnar/sql/downgrades/columnar--10.1-1--10.0-3.sql"
|
#include "../../../columnar/sql/downgrades/columnar--10.1-1--10.0-3.sql"
|
||||||
|
|
||||||
|
@ -16,4 +16,8 @@ COMMENT ON FUNCTION create_distributed_table(table_name regclass,
|
||||||
colocate_with text)
|
colocate_with text)
|
||||||
IS 'creates a distributed table';
|
IS 'creates a distributed table';
|
||||||
|
|
||||||
|
DROP FUNCTION pg_catalog.worker_partitioned_relation_total_size(text);
|
||||||
|
DROP FUNCTION pg_catalog.worker_partitioned_relation_size(text);
|
||||||
|
DROP FUNCTION pg_catalog.worker_partitioned_table_size(text);
|
||||||
|
|
||||||
#include "../udfs/citus_finish_pg_upgrade/10.0-1.sql"
|
#include "../udfs/citus_finish_pg_upgrade/10.0-1.sql"
|
||||||
|
|
7
src/backend/distributed/sql/udfs/worker_partitioned_relation_size/10.1-1.sql
generated
Normal file
7
src/backend/distributed/sql/udfs/worker_partitioned_relation_size/10.1-1.sql
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE OR REPLACE FUNCTION worker_partitioned_relation_size(relation text)
|
||||||
|
RETURNS bigint AS $$
|
||||||
|
SELECT sum(pg_relation_size(relid))::bigint
|
||||||
|
FROM (SELECT relid from pg_partition_tree(relation)) partition_tree;
|
||||||
|
$$ LANGUAGE SQL;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.worker_partitioned_relation_size(text)
|
||||||
|
IS 'Calculates and returns the size of a partitioned relation';
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE OR REPLACE FUNCTION worker_partitioned_relation_size(relation text)
|
||||||
|
RETURNS bigint AS $$
|
||||||
|
SELECT sum(pg_relation_size(relid))::bigint
|
||||||
|
FROM (SELECT relid from pg_partition_tree(relation)) partition_tree;
|
||||||
|
$$ LANGUAGE SQL;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.worker_partitioned_relation_size(text)
|
||||||
|
IS 'Calculates and returns the size of a partitioned relation';
|
7
src/backend/distributed/sql/udfs/worker_partitioned_relation_total_size/10.1-1.sql
generated
Normal file
7
src/backend/distributed/sql/udfs/worker_partitioned_relation_total_size/10.1-1.sql
generated
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE OR REPLACE FUNCTION worker_partitioned_relation_total_size(relation text)
|
||||||
|
RETURNS bigint AS $$
|
||||||
|
SELECT sum(pg_total_relation_size(relid))::bigint
|
||||||
|
FROM (SELECT relid from pg_partition_tree(relation)) partition_tree;
|
||||||
|
$$ LANGUAGE SQL;
|
||||||
|
COMMENT ON FUNCTION worker_partitioned_relation_total_size(text)
|
||||||
|
IS 'Calculates and returns the total size of a partitioned relation';
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE OR REPLACE FUNCTION worker_partitioned_relation_total_size(relation text)
|
||||||
|
RETURNS bigint AS $$
|
||||||
|
SELECT sum(pg_total_relation_size(relid))::bigint
|
||||||
|
FROM (SELECT relid from pg_partition_tree(relation)) partition_tree;
|
||||||
|
$$ LANGUAGE SQL;
|
||||||
|
COMMENT ON FUNCTION worker_partitioned_relation_total_size(text)
|
||||||
|
IS 'Calculates and returns the total size of a partitioned relation';
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE OR REPLACE FUNCTION worker_partitioned_table_size(relation text)
|
||||||
|
RETURNS bigint AS $$
|
||||||
|
SELECT sum(pg_table_size(relid))::bigint
|
||||||
|
FROM (SELECT relid from pg_partition_tree(relation)) partition_tree;
|
||||||
|
$$ LANGUAGE SQL;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.worker_partitioned_table_size(text)
|
||||||
|
IS 'Calculates and returns the size of a partitioned table';
|
|
@ -0,0 +1,7 @@
|
||||||
|
CREATE OR REPLACE FUNCTION worker_partitioned_table_size(relation text)
|
||||||
|
RETURNS bigint AS $$
|
||||||
|
SELECT sum(pg_table_size(relid))::bigint
|
||||||
|
FROM (SELECT relid from pg_partition_tree(relation)) partition_tree;
|
||||||
|
$$ LANGUAGE SQL;
|
||||||
|
COMMENT ON FUNCTION pg_catalog.worker_partitioned_table_size(text)
|
||||||
|
IS 'Calculates and returns the size of a partitioned table';
|
|
@ -565,7 +565,10 @@ SELECT * FROM print_extension_changes();
|
||||||
function citus_internal.columnar_ensure_objects_exist() |
|
function citus_internal.columnar_ensure_objects_exist() |
|
||||||
function create_distributed_table(regclass,text,citus.distribution_type,text) |
|
function create_distributed_table(regclass,text,citus.distribution_type,text) |
|
||||||
| function create_distributed_table(regclass,text,citus.distribution_type,text,integer)
|
| function create_distributed_table(regclass,text,citus.distribution_type,text,integer)
|
||||||
(3 rows)
|
| function worker_partitioned_relation_size(text)
|
||||||
|
| function worker_partitioned_relation_total_size(text)
|
||||||
|
| function worker_partitioned_table_size(text)
|
||||||
|
(6 rows)
|
||||||
|
|
||||||
DROP TABLE prev_objects, extension_diff;
|
DROP TABLE prev_objects, extension_diff;
|
||||||
-- show running version
|
-- show running version
|
||||||
|
|
|
@ -2078,6 +2078,40 @@ SELECT create_distributed_table('test_inheritance','a');
|
||||||
CREATE TABLE local_inheritance (k int) INHERITS (test_inheritance);
|
CREATE TABLE local_inheritance (k int) INHERITS (test_inheritance);
|
||||||
ERROR: non-distributed tables cannot inherit distributed tables
|
ERROR: non-distributed tables cannot inherit distributed tables
|
||||||
DROP TABLE test_inheritance;
|
DROP TABLE test_inheritance;
|
||||||
|
-- test worker partitioned table size functions
|
||||||
|
CREATE TABLE "events.Energy Added" (user_id int, time timestamp with time zone, data jsonb, PRIMARY KEY (user_id, time )) PARTITION BY RANGE ("time");
|
||||||
|
CREATE INDEX idx_btree_hobbies ON "events.Energy Added" USING BTREE ((data->>'location'));
|
||||||
|
SELECT create_distributed_table('"events.Energy Added"', 'user_id');
|
||||||
|
create_distributed_table
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
CREATE TABLE "Energy Added_17634" PARTITION OF "events.Energy Added" FOR VALUES FROM ('2018-04-13 00:00:00+00') TO ('2018-04-14 00:00:00+00');
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
-- should not be zero because of TOAST, vm, fms
|
||||||
|
SELECT worker_partitioned_table_size('"events.Energy Added_1660207"');
|
||||||
|
worker_partitioned_table_size
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
8192
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- should be zero since no data
|
||||||
|
SELECT worker_partitioned_relation_size('"events.Energy Added_1660207"');
|
||||||
|
worker_partitioned_relation_size
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
0
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
-- should not be zero because of indexes + pg_table_size()
|
||||||
|
SELECT worker_partitioned_relation_total_size('"events.Energy Added_1660207"');
|
||||||
|
worker_partitioned_relation_total_size
|
||||||
|
---------------------------------------------------------------------
|
||||||
|
24576
|
||||||
|
(1 row)
|
||||||
|
|
||||||
|
\c - - - :master_port
|
||||||
|
DROP TABLE "events.Energy Added";
|
||||||
DROP SCHEMA partitioning_schema CASCADE;
|
DROP SCHEMA partitioning_schema CASCADE;
|
||||||
NOTICE: drop cascades to table partitioning_schema."schema-test"
|
NOTICE: drop cascades to table partitioning_schema."schema-test"
|
||||||
DROP TABLE IF EXISTS
|
DROP TABLE IF EXISTS
|
||||||
|
|
|
@ -199,6 +199,9 @@ ORDER BY 1;
|
||||||
function worker_partial_agg_ffunc(internal)
|
function worker_partial_agg_ffunc(internal)
|
||||||
function worker_partial_agg_sfunc(internal,oid,anyelement)
|
function worker_partial_agg_sfunc(internal,oid,anyelement)
|
||||||
function worker_partition_query_result(text,text,integer,citus.distribution_type,text[],text[],boolean)
|
function worker_partition_query_result(text,text,integer,citus.distribution_type,text[],text[],boolean)
|
||||||
|
function worker_partitioned_relation_size(text)
|
||||||
|
function worker_partitioned_relation_total_size(text)
|
||||||
|
function worker_partitioned_table_size(text)
|
||||||
function worker_range_partition_table(bigint,integer,text,text,oid,anyarray)
|
function worker_range_partition_table(bigint,integer,text,text,oid,anyarray)
|
||||||
function worker_record_sequence_dependency(regclass,regclass,name)
|
function worker_record_sequence_dependency(regclass,regclass,name)
|
||||||
function worker_repartition_cleanup(bigint)
|
function worker_repartition_cleanup(bigint)
|
||||||
|
@ -242,5 +245,5 @@ ORDER BY 1;
|
||||||
view citus_worker_stat_activity
|
view citus_worker_stat_activity
|
||||||
view pg_dist_shard_placement
|
view pg_dist_shard_placement
|
||||||
view time_partitions
|
view time_partitions
|
||||||
(226 rows)
|
(229 rows)
|
||||||
|
|
||||||
|
|
|
@ -1225,6 +1225,21 @@ SELECT create_distributed_table('test_inheritance','a');
|
||||||
CREATE TABLE local_inheritance (k int) INHERITS (test_inheritance);
|
CREATE TABLE local_inheritance (k int) INHERITS (test_inheritance);
|
||||||
DROP TABLE test_inheritance;
|
DROP TABLE test_inheritance;
|
||||||
|
|
||||||
|
-- test worker partitioned table size functions
|
||||||
|
CREATE TABLE "events.Energy Added" (user_id int, time timestamp with time zone, data jsonb, PRIMARY KEY (user_id, time )) PARTITION BY RANGE ("time");
|
||||||
|
CREATE INDEX idx_btree_hobbies ON "events.Energy Added" USING BTREE ((data->>'location'));
|
||||||
|
SELECT create_distributed_table('"events.Energy Added"', 'user_id');
|
||||||
|
CREATE TABLE "Energy Added_17634" PARTITION OF "events.Energy Added" FOR VALUES FROM ('2018-04-13 00:00:00+00') TO ('2018-04-14 00:00:00+00');
|
||||||
|
\c - - - :worker_1_port
|
||||||
|
-- should not be zero because of TOAST, vm, fms
|
||||||
|
SELECT worker_partitioned_table_size('"events.Energy Added_1660207"');
|
||||||
|
-- should be zero since no data
|
||||||
|
SELECT worker_partitioned_relation_size('"events.Energy Added_1660207"');
|
||||||
|
-- should not be zero because of indexes + pg_table_size()
|
||||||
|
SELECT worker_partitioned_relation_total_size('"events.Energy Added_1660207"');
|
||||||
|
\c - - - :master_port
|
||||||
|
DROP TABLE "events.Energy Added";
|
||||||
|
|
||||||
DROP SCHEMA partitioning_schema CASCADE;
|
DROP SCHEMA partitioning_schema CASCADE;
|
||||||
DROP TABLE IF EXISTS
|
DROP TABLE IF EXISTS
|
||||||
partitioning_hash_test,
|
partitioning_hash_test,
|
||||||
|
|
Loading…
Reference in New Issue