From 5edc04d95653d8694daaca540062be6c0a05530e Mon Sep 17 00:00:00 2001 From: gindibay Date: Thu, 7 Dec 2023 13:49:54 +0300 Subject: [PATCH] Adds pg_database_size_local_function --- .../distributed/metadata/metadata_sync.c | 40 +++++++++++++++++++ .../sql/downgrades/citus--12.2-1--12.1-1.sql | 2 + .../12.2-1.sql | 16 ++++++++ .../latest.sql | 16 ++++++++ 4 files changed, 74 insertions(+) diff --git a/src/backend/distributed/metadata/metadata_sync.c b/src/backend/distributed/metadata/metadata_sync.c index f0be1995b..bd782c466 100644 --- a/src/backend/distributed/metadata/metadata_sync.c +++ b/src/backend/distributed/metadata/metadata_sync.c @@ -17,6 +17,7 @@ #include "postgres.h" +#include "fmgr.h" #include "miscadmin.h" #include "pgstat.h" @@ -184,6 +185,8 @@ PG_FUNCTION_INFO_V1(citus_internal_add_tenant_schema); PG_FUNCTION_INFO_V1(citus_internal_delete_tenant_schema); PG_FUNCTION_INFO_V1(citus_internal_update_none_dist_table_metadata); PG_FUNCTION_INFO_V1(citus_internal_database_command); +PG_FUNCTION_INFO_V1(citus_pg_database_size_by_db_name); +PG_FUNCTION_INFO_V1(citus_pg_database_size_by_db_oid); static bool got_SIGTERM = false; @@ -4048,6 +4051,43 @@ citus_internal_database_command(PG_FUNCTION_ARGS) PG_RETURN_VOID(); } +Datum +citus_pg_database_size_by_db_name(PG_FUNCTION_ARGS){ + CheckCitusVersion(ERROR); + + PG_ENSURE_ARGNOTNULL(0, "dbName"); + + Name dbName = PG_GETARG_NAME(0); + Datum size = DirectFunctionCall1(pg_database_size_name, NameGetDatum(dbName)); + + PG_RETURN_DATUM(size); + +} + +Datum +citus_pg_database_size_by_db_oid(PG_FUNCTION_ARGS){ + CheckCitusVersion(ERROR); + + PG_ENSURE_ARGNOTNULL(0, "dbOid"); + + Oid dbOid = PG_GETARG_OID(0); + Datum size = DirectFunctionCall1(pg_database_size_oid, ObjectIdGetDatum(dbOid)); + + PG_RETURN_DATUM(size); + +} + +Datum citus_internal_database_size(PG_FUNCTION_ARGS){ + CheckCitusVersion(ERROR); + + PG_ENSURE_ARGNOTNULL(0, "dbName"); + + Name dbName = PG_GETARG_NAME(0); + + + PG_RETURN_DATUM(size); +} + /* * SyncNewColocationGroup synchronizes a new pg_dist_colocation entry to a worker. diff --git a/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql b/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql index d18f7257b..44ac8d447 100644 --- a/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql +++ b/src/backend/distributed/sql/downgrades/citus--12.2-1--12.1-1.sql @@ -1,5 +1,7 @@ -- citus--12.2-1--12.1-1 DROP FUNCTION pg_catalog.citus_internal_database_command(text); +DROP FUNCTION pg_catalog.pg_database_size_local(name); +DROP FUNCTION pg_catalog.pg_database_size_local(oid); #include "../udfs/citus_add_rebalance_strategy/10.1-1.sql" diff --git a/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql b/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql index 9f6d873cc..3e44c3455 100644 --- a/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql +++ b/src/backend/distributed/sql/udfs/citus_internal_database_command/12.2-1.sql @@ -8,3 +8,19 @@ CREATE OR REPLACE FUNCTION pg_catalog.citus_internal_database_command(command te AS 'MODULE_PATHNAME', $$citus_internal_database_command$$; COMMENT ON FUNCTION pg_catalog.citus_internal_database_command(text) IS 'run a database command without transaction block restrictions'; + +CREATE OR REPLACE FUNCTION pg_catalog.pg_database_size_local(db_name name) + RETURNS bigint + LANGUAGE C + VOLATILE +AS 'MODULE_PATHNAME', $$citus_pg_database_size_by_db_name$$; +COMMENT ON FUNCTION pg_catalog.pg_database_size_local(name) IS + 'calculates the size of a database in bytes by its name in a multi-node cluster'; + + CREATE OR REPLACE FUNCTION pg_catalog.pg_database_size_local(db_oid oid) + RETURNS bigint + LANGUAGE C + VOLATILE +AS 'MODULE_PATHNAME', $$citus_pg_database_size_by_db_oid$$; +COMMENT ON FUNCTION pg_catalog.pg_database_size_local(oid) IS + 'calculates the size of a database in bytes by its oid in a multi-node cluster'; diff --git a/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql b/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql index 9f6d873cc..bd333191e 100644 --- a/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql +++ b/src/backend/distributed/sql/udfs/citus_internal_database_command/latest.sql @@ -8,3 +8,19 @@ CREATE OR REPLACE FUNCTION pg_catalog.citus_internal_database_command(command te AS 'MODULE_PATHNAME', $$citus_internal_database_command$$; COMMENT ON FUNCTION pg_catalog.citus_internal_database_command(text) IS 'run a database command without transaction block restrictions'; + + CREATE OR REPLACE FUNCTION pg_catalog.pg_database_size_local(db_name name) + RETURNS bigint + LANGUAGE C + VOLATILE +AS 'MODULE_PATHNAME', $$citus_pg_database_size_by_db_name$$; +COMMENT ON FUNCTION pg_catalog.pg_database_size_local(name) IS + 'calculates the size of a database in bytes by its name in a multi-node cluster'; + + CREATE OR REPLACE FUNCTION pg_catalog.pg_database_size_local(db_oid oid) + RETURNS bigint + LANGUAGE C + VOLATILE +AS 'MODULE_PATHNAME', $$citus_pg_database_size_by_db_oid$$; +COMMENT ON FUNCTION pg_catalog.pg_database_size_local(oid) IS + 'calculates the size of a database in bytes by its oid in a multi-node cluster';