diff --git a/src/backend/distributed/metadata/metadata_cache.c b/src/backend/distributed/metadata/metadata_cache.c index 47d0cdbf7..5a7b19fc3 100644 --- a/src/backend/distributed/metadata/metadata_cache.c +++ b/src/backend/distributed/metadata/metadata_cache.c @@ -3777,6 +3777,16 @@ InvalidateMetadataSystemCache(void) } +/* + * AllCitusTableIds returns all citus table ids. + */ +List * +AllCitusTableIds(void) +{ + return CitusTableTypeIdList(ANY_CITUS_TABLE_TYPE); +} + + /* * CitusTableTypeIdList function scans pg_dist_partition and returns a * list of OID's for the tables matching given citusTableType. diff --git a/src/backend/distributed/metadata/metadata_utility.c b/src/backend/distributed/metadata/metadata_utility.c index d30b33546..7a6ef8a38 100644 --- a/src/backend/distributed/metadata/metadata_utility.c +++ b/src/backend/distributed/metadata/metadata_utility.c @@ -35,6 +35,7 @@ #include "distributed/citus_nodes.h" #include "distributed/citus_safe_lib.h" #include "distributed/listutils.h" +#include "distributed/lock_graph.h" #include "distributed/metadata_utility.h" #include "distributed/coordinator_protocol.h" #include "distributed/metadata_cache.h" @@ -50,6 +51,7 @@ #include "distributed/relay_utility.h" #include "distributed/resource_lock.h" #include "distributed/remote_commands.h" +#include "distributed/tuplestore.h" #include "distributed/worker_manager.h" #include "distributed/worker_protocol.h" #include "distributed/version_compat.h" @@ -77,13 +79,59 @@ static bool DistributedTableSizeOnWorker(WorkerNode *workerNode, Oid relationId, char *sizeQuery, bool failOnError, uint64 *tableSize); static List * ShardIntervalsOnWorkerGroup(WorkerNode *workerNode, Oid relationId); +static char * GenerateShardNameAndSizeQueryForShardList(List *shardIntervalList); +static char * GenerateAllShardNameAndSizeQueryForNode(WorkerNode *workerNode); +static List * GenerateShardSizesQueryList(List *workerNodeList); static void ErrorIfNotSuitableToGetSize(Oid relationId); - +static List * OpenConnectionToNodes(List *workerNodeList); +static void ReceiveShardNameAndSizeResults(List *connectionList, + Tuplestorestate *tupleStore, + TupleDesc tupleDescriptor); /* exports for SQL callable functions */ PG_FUNCTION_INFO_V1(citus_table_size); PG_FUNCTION_INFO_V1(citus_total_relation_size); PG_FUNCTION_INFO_V1(citus_relation_size); +PG_FUNCTION_INFO_V1(citus_shard_sizes); + +/* + * citus_shard_sizes returns all shard names and their sizes. + */ +Datum +citus_shard_sizes(PG_FUNCTION_ARGS) +{ + CheckCitusVersion(ERROR); + + List *workerNodeList = ActivePrimaryNodeList(NoLock); + + List *shardSizesQueryList = GenerateShardSizesQueryList(workerNodeList); + + List *connectionList = OpenConnectionToNodes(workerNodeList); + FinishConnectionListEstablishment(connectionList); + + + /* send commands in parallel */ + for (int i = 0; i < list_length(connectionList); i++) + { + MultiConnection *connection = (MultiConnection *) list_nth(connectionList, i); + char *shardSizesQuery = (char *) list_nth(shardSizesQueryList, i); + int querySent = SendRemoteCommand(connection, shardSizesQuery); + if (querySent == 0) + { + ReportConnectionError(connection, WARNING); + } + } + + TupleDesc tupleDescriptor = NULL; + Tuplestorestate *tupleStore = SetupTuplestore(fcinfo, &tupleDescriptor); + + ReceiveShardNameAndSizeResults(connectionList, tupleStore, tupleDescriptor); + + /* clean up and return the tuplestore */ + tuplestore_donestoring(tupleStore); + + PG_RETURN_VOID(); +} /* @@ -177,6 +225,107 @@ citus_relation_size(PG_FUNCTION_ARGS) } +/* + * OpenConnectionToNodes opens a single connection per node + * for the given workerNodeList. + */ +static List * +OpenConnectionToNodes(List *workerNodeList) +{ + List *connectionList = NIL; + WorkerNode *workerNode = NULL; + foreach_ptr(workerNode, workerNodeList) + { + const char *nodeName = workerNode->workerName; + int nodePort = workerNode->workerPort; + int connectionFlags = 0; + + MultiConnection *connection = StartNodeConnection(connectionFlags, nodeName, + nodePort); + + connectionList = lappend(connectionList, connection); + } + return connectionList; +} + + +/* + * GenerateShardSizesQueryList generates a query per node that + * will return all shard_name, shard_size pairs from the node. + */ +static List * +GenerateShardSizesQueryList(List *workerNodeList) +{ + List *shardSizesQueryList = NIL; + WorkerNode *workerNode = NULL; + foreach_ptr(workerNode, workerNodeList) + { + char *shardSizesQuery = GenerateAllShardNameAndSizeQueryForNode(workerNode); + shardSizesQueryList = lappend(shardSizesQueryList, shardSizesQuery); + } + return shardSizesQueryList; +} + + +/* + * ReceiveShardNameAndSizeResults receives shard name and size results from the given + * connection list. + */ +static void +ReceiveShardNameAndSizeResults(List *connectionList, Tuplestorestate *tupleStore, + TupleDesc tupleDescriptor) +{ + MultiConnection *connection = NULL; + foreach_ptr(connection, connectionList) + { + bool raiseInterrupts = true; + Datum values[SHARD_SIZES_COLUMN_COUNT]; + bool isNulls[SHARD_SIZES_COLUMN_COUNT]; + + if (PQstatus(connection->pgConn) != CONNECTION_OK) + { + continue; + } + + PGresult *result = GetRemoteCommandResult(connection, raiseInterrupts); + if (!IsResponseOK(result)) + { + ReportResultError(connection, result, WARNING); + continue; + } + + int64 rowCount = PQntuples(result); + int64 colCount = PQnfields(result); + + /* Although it is not expected */ + if (colCount != SHARD_SIZES_COLUMN_COUNT) + { + ereport(WARNING, (errmsg("unexpected number of columns from " + "citus_shard_sizes"))); + continue; + } + + for (int64 rowIndex = 0; rowIndex < rowCount; rowIndex++) + { + memset(values, 0, sizeof(values)); + memset(isNulls, false, sizeof(isNulls)); + + char *tableName = PQgetvalue(result, rowIndex, 0); + Datum resultStringDatum = CStringGetDatum(tableName); + Datum textDatum = DirectFunctionCall1(textin, resultStringDatum); + + values[0] = textDatum; + values[1] = ParseIntField(result, rowIndex, 1); + + tuplestore_putvalues(tupleStore, tupleDescriptor, values, isNulls); + } + + PQclear(result); + ForgetResults(connection); + } +} + + /* * DistributedTableSize is helper function for each kind of citus size functions. * It first checks whether the table is distributed and size query can be run on @@ -422,6 +571,62 @@ GenerateSizeQueryOnMultiplePlacements(List *shardIntervalList, char *sizeQuery) } +/* + * GenerateAllShardNameAndSizeQueryForNode generates a query that returns all + * shard_name, shard_size pairs for the given node. + */ +static char * +GenerateAllShardNameAndSizeQueryForNode(WorkerNode *workerNode) +{ + List *allCitusTableIds = AllCitusTableIds(); + + StringInfo allShardNameAndSizeQuery = makeStringInfo(); + + Oid relationId = InvalidOid; + foreach_oid(relationId, allCitusTableIds) + { + List *shardIntervalsOnNode = ShardIntervalsOnWorkerGroup(workerNode, relationId); + char *shardNameAndSizeQuery = + GenerateShardNameAndSizeQueryForShardList(shardIntervalsOnNode); + appendStringInfoString(allShardNameAndSizeQuery, shardNameAndSizeQuery); + } + + /* Add a dummy entry so that UNION ALL doesn't complain */ + appendStringInfo(allShardNameAndSizeQuery, "SELECT NULL::text, 0::bigint;"); + return allShardNameAndSizeQuery->data; +} + + +/* + * GenerateShardNameAndSizeQueryForShardList generates a SELECT shard_name - shard_size query to get + * size of multiple tables. + */ +static char * +GenerateShardNameAndSizeQueryForShardList(List *shardIntervalList) +{ + StringInfo selectQuery = makeStringInfo(); + + ShardInterval *shardInterval = NULL; + foreach_ptr(shardInterval, shardIntervalList) + { + uint64 shardId = shardInterval->shardId; + Oid schemaId = get_rel_namespace(shardInterval->relationId); + char *schemaName = get_namespace_name(schemaId); + char *shardName = get_rel_name(shardInterval->relationId); + AppendShardIdToName(&shardName, shardId); + + char *shardQualifiedName = quote_qualified_identifier(schemaName, shardName); + char *quotedShardName = quote_literal_cstr(shardQualifiedName); + + appendStringInfo(selectQuery, "SELECT %s AS shard_name, ", quotedShardName); + appendStringInfo(selectQuery, PG_RELATION_SIZE_FUNCTION, quotedShardName); + appendStringInfo(selectQuery, " UNION ALL "); + } + + return selectQuery->data; +} + + /* * ErrorIfNotSuitableToGetSize determines whether the table is suitable to find * its' size with internal functions. diff --git a/src/backend/distributed/sql/citus--9.5-1--10.0-1.sql b/src/backend/distributed/sql/citus--9.5-1--10.0-1.sql index 8f6e26650..5ef39e451 100644 --- a/src/backend/distributed/sql/citus--9.5-1--10.0-1.sql +++ b/src/backend/distributed/sql/citus--9.5-1--10.0-1.sql @@ -50,3 +50,6 @@ RENAME TO citus_drop_all_shards; DROP FUNCTION pg_catalog.master_modify_multiple_shards(text); DROP FUNCTION master_create_distributed_table(regclass, text, citus.distribution_type); DROP FUNCTION master_create_worker_shards(text, integer, integer); +#include "udfs/citus_shard_sizes/10.0-1.sql" +#include "udfs/citus_shards/10.0-1.sql" + diff --git a/src/backend/distributed/sql/downgrades/citus--10.0-1--9.5-1.sql b/src/backend/distributed/sql/downgrades/citus--10.0-1--9.5-1.sql index cac93a5ce..7fae38c89 100644 --- a/src/backend/distributed/sql/downgrades/citus--10.0-1--9.5-1.sql +++ b/src/backend/distributed/sql/downgrades/citus--10.0-1--9.5-1.sql @@ -75,3 +75,5 @@ CREATE FUNCTION pg_catalog.master_create_worker_shards(table_name text, shard_co #include "../udfs/upgrade_to_reference_table/8.0-1.sql" #include "../udfs/undistribute_table/9.5-1.sql" #include "../udfs/create_citus_local_table/9.5-1.sql" +DROP VIEW pg_catalog.citus_shards CASCADE; +DROP FUNCTION pg_catalog.citus_shard_sizes(OUT table_name text, OUT size bigint); diff --git a/src/backend/distributed/sql/udfs/citus_shard_sizes/10.0-1.sql b/src/backend/distributed/sql/udfs/citus_shard_sizes/10.0-1.sql new file mode 100644 index 000000000..fd619b0a2 --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_shard_sizes/10.0-1.sql @@ -0,0 +1,6 @@ +CREATE FUNCTION pg_catalog.citus_shard_sizes(OUT table_name text, OUT size bigint) + RETURNS SETOF RECORD + LANGUAGE C STRICT + AS 'MODULE_PATHNAME', $$citus_shard_sizes$$; + COMMENT ON FUNCTION pg_catalog.citus_shard_sizes(OUT table_name text, OUT size bigint) + IS 'returns shards sizes across citus cluster'; diff --git a/src/backend/distributed/sql/udfs/citus_shard_sizes/latest.sql b/src/backend/distributed/sql/udfs/citus_shard_sizes/latest.sql new file mode 100644 index 000000000..fd619b0a2 --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_shard_sizes/latest.sql @@ -0,0 +1,6 @@ +CREATE FUNCTION pg_catalog.citus_shard_sizes(OUT table_name text, OUT size bigint) + RETURNS SETOF RECORD + LANGUAGE C STRICT + AS 'MODULE_PATHNAME', $$citus_shard_sizes$$; + COMMENT ON FUNCTION pg_catalog.citus_shard_sizes(OUT table_name text, OUT size bigint) + IS 'returns shards sizes across citus cluster'; diff --git a/src/backend/distributed/sql/udfs/citus_shards/10.0-1.sql b/src/backend/distributed/sql/udfs/citus_shards/10.0-1.sql new file mode 100644 index 000000000..2f0e7fd78 --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_shards/10.0-1.sql @@ -0,0 +1,33 @@ +CREATE OR REPLACE VIEW citus.citus_shards AS +WITH shard_sizes AS (SELECT * FROM pg_catalog.citus_shard_sizes()) +SELECT + shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) as shard_name, + pg_dist_shard.shardid, + pg_dist_shard.logicalrelid AS table_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, + (SELECT pg_size_pretty(size) FROM shard_sizes WHERE + shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) = table_name + OR + 'public.' || shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) = table_name + LIMIT 1) 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 +; + +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_shards/latest.sql b/src/backend/distributed/sql/udfs/citus_shards/latest.sql new file mode 100644 index 000000000..2f0e7fd78 --- /dev/null +++ b/src/backend/distributed/sql/udfs/citus_shards/latest.sql @@ -0,0 +1,33 @@ +CREATE OR REPLACE VIEW citus.citus_shards AS +WITH shard_sizes AS (SELECT * FROM pg_catalog.citus_shard_sizes()) +SELECT + shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) as shard_name, + pg_dist_shard.shardid, + pg_dist_shard.logicalrelid AS table_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, + (SELECT pg_size_pretty(size) FROM shard_sizes WHERE + shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) = table_name + OR + 'public.' || shard_name(pg_dist_shard.logicalrelid, pg_dist_shard.shardid) = table_name + LIMIT 1) 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 +; + +ALTER VIEW citus.citus_shards SET SCHEMA pg_catalog; +GRANT SELECT ON pg_catalog.citus_shards TO public; diff --git a/src/include/distributed/metadata_cache.h b/src/include/distributed/metadata_cache.h index 3659b765b..c90af0554 100644 --- a/src/include/distributed/metadata_cache.h +++ b/src/include/distributed/metadata_cache.h @@ -137,7 +137,7 @@ typedef enum ANY_CITUS_TABLE_TYPE } CitusTableType; - +extern List * AllCitusTableIds(void); extern bool IsCitusTableType(Oid relationId, CitusTableType tableType); extern bool IsCitusTableTypeCacheEntry(CitusTableCacheEntry *tableEtnry, CitusTableType tableType); diff --git a/src/include/distributed/metadata_utility.h b/src/include/distributed/metadata_utility.h index fab9d2f0d..26c77bd62 100644 --- a/src/include/distributed/metadata_utility.h +++ b/src/include/distributed/metadata_utility.h @@ -35,6 +35,8 @@ #define PG_TOTAL_RELATION_SIZE_FUNCTION "pg_total_relation_size(%s)" #define CSTORE_TABLE_SIZE_FUNCTION "cstore_table_size(%s)" +#define SHARD_SIZES_COLUMN_COUNT 2 + /* In-memory representation of a typed tuple in pg_dist_shard. */ typedef struct ShardInterval { diff --git a/src/test/regress/expected/multi_extension.out b/src/test/regress/expected/multi_extension.out index 94c9b71b5..269267fd1 100644 --- a/src/test/regress/expected/multi_extension.out +++ b/src/test/regress/expected/multi_extension.out @@ -483,6 +483,7 @@ SELECT * FROM print_extension_changes(); | function citus_remove_node(text,integer) | function citus_set_coordinator_host(text,integer,noderole,name) | function citus_set_node_property(text,integer,text,boolean) + | function citus_shard_sizes() | function citus_total_relation_size(regclass,boolean) | function citus_unmark_object_distributed(oid,oid,integer) | function citus_update_node(integer,text,integer,boolean,integer) @@ -497,9 +498,10 @@ SELECT * FROM print_extension_changes(); | table columnar.columnar_skipnodes | table columnar.columnar_stripes | table columnar.options + | view citus_shards | view citus_tables | view time_partitions -(54 rows) +(56 rows) DROP TABLE prev_objects, extension_diff; -- show running version diff --git a/src/test/regress/expected/multi_extension_0.out b/src/test/regress/expected/multi_extension_0.out index 88ea9aa42..c7cfcfe55 100644 --- a/src/test/regress/expected/multi_extension_0.out +++ b/src/test/regress/expected/multi_extension_0.out @@ -466,7 +466,7 @@ SELECT * FROM print_extension_changes(); | function citus_add_secondary_node(text,integer,text,integer,name) | function citus_conninfo_cache_invalidate() | function citus_copy_shard_placement(bigint,text,integer,text,integer,boolean,citus.shard_transfer_mode) - | function citus_disable_node(text, integer) + | function citus_disable_node(text,integer) | function citus_dist_local_group_cache_invalidate() | function citus_dist_node_cache_invalidate() | function citus_dist_object_cache_invalidate() @@ -480,6 +480,7 @@ SELECT * FROM print_extension_changes(); | function citus_remove_node(text,integer) | function citus_set_coordinator_host(text,integer,noderole,name) | function citus_set_node_property(text,integer,text,boolean) + | function citus_shard_sizes() | function citus_total_relation_size(regclass,boolean) | function citus_unmark_object_distributed(oid,oid,integer) | function citus_update_node(integer,text,integer,boolean,integer) @@ -493,9 +494,10 @@ SELECT * FROM print_extension_changes(); | table columnar.columnar_skipnodes | table columnar.columnar_stripes | table columnar.options + | view citus_shards | view citus_tables | view time_partitions -(50 rows) +(52 rows) DROP TABLE prev_objects, extension_diff; -- show running version diff --git a/src/test/regress/expected/multi_mx_create_table.out b/src/test/regress/expected/multi_mx_create_table.out index 9230beda0..a84f06596 100644 --- a/src/test/regress/expected/multi_mx_create_table.out +++ b/src/test/regress/expected/multi_mx_create_table.out @@ -546,3 +546,477 @@ ORDER BY "Name"::text; supplier_mx | reference | | 1 | postgres (23 rows) +SELECT shard_name, table_name, citus_table_type, shard_size FROM citus_shards ORDER BY shard_name::text; + shard_name | table_name | citus_table_type | shard_size +--------------------------------------------------------------------- + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220096 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220097 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220098 | app_analytics_events_mx | distributed | 0 bytes + app_analytics_events_mx_1220099 | app_analytics_events_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220104 | articles_hash_mx | distributed | 0 bytes + articles_hash_mx_1220105 | articles_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + articles_single_shard_hash_mx_1220106 | articles_single_shard_hash_mx | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220016 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220017 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220018 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220019 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220020 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220021 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220022 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220023 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220024 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220025 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220026 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220027 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220028 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220029 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220030 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_1220031 | citus_mx_test_schema.nation_hash | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220044 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220045 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220046 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 0 bytes + citus_mx_test_schema.nation_hash_collation_search_path_1220047 | citus_mx_test_schema.nation_hash_collation_search_path | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220048 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220049 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220050 | citus_mx_test_schema.nation_hash_composite_types | distributed | 0 bytes + citus_mx_test_schema.nation_hash_composite_types_1220051 | citus_mx_test_schema.nation_hash_composite_types | distributed | 8192 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220032 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220033 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220034 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_1220035 | citus_mx_test_schema_join_1.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220036 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220037 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220038 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_1.nation_hash_2_1220039 | citus_mx_test_schema_join_1.nation_hash_2 | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220040 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220041 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220042 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + citus_mx_test_schema_join_2.nation_hash_1220043 | citus_mx_test_schema_join_2.nation_hash | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220107 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220108 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220109 | company_employees_mx | distributed | 0 bytes + company_employees_mx_1220110 | company_employees_mx | distributed | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + customer_mx_1220084 | customer_mx | reference | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + labs_mx_1220102 | labs_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220092 | limit_orders_mx | distributed | 0 bytes + limit_orders_mx_1220093 | limit_orders_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220052 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220053 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220054 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220055 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220056 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220057 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220058 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220059 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220060 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220061 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220062 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220063 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220064 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220065 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220066 | lineitem_mx | distributed | 0 bytes + lineitem_mx_1220067 | lineitem_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220094 | multiple_hash_mx | distributed | 0 bytes + multiple_hash_mx_1220095 | multiple_hash_mx | distributed | 0 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220088 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220089 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220090 | mx_ddl_table | distributed | 8192 bytes + mx_ddl_table_1220091 | mx_ddl_table | distributed | 8192 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220000 | nation_hash | distributed | 0 bytes + nation_hash_1220001 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220002 | nation_hash | distributed | 0 bytes + nation_hash_1220003 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220004 | nation_hash | distributed | 0 bytes + nation_hash_1220005 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220006 | nation_hash | distributed | 0 bytes + nation_hash_1220007 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220008 | nation_hash | distributed | 0 bytes + nation_hash_1220009 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220010 | nation_hash | distributed | 0 bytes + nation_hash_1220011 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220012 | nation_hash | distributed | 0 bytes + nation_hash_1220013 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220014 | nation_hash | distributed | 0 bytes + nation_hash_1220015 | nation_hash | distributed | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + nation_mx_1220085 | nation_mx | reference | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + objects_mx_1220103 | objects_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220068 | orders_mx | distributed | 0 bytes + orders_mx_1220069 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220070 | orders_mx | distributed | 0 bytes + orders_mx_1220071 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220072 | orders_mx | distributed | 0 bytes + orders_mx_1220073 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220074 | orders_mx | distributed | 0 bytes + orders_mx_1220075 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220076 | orders_mx | distributed | 0 bytes + orders_mx_1220077 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220078 | orders_mx | distributed | 0 bytes + orders_mx_1220079 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220080 | orders_mx | distributed | 0 bytes + orders_mx_1220081 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220082 | orders_mx | distributed | 0 bytes + orders_mx_1220083 | orders_mx | distributed | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + part_mx_1220086 | part_mx | reference | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220100 | researchers_mx | distributed | 0 bytes + researchers_mx_1220101 | researchers_mx | distributed | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes + supplier_mx_1220087 | supplier_mx | reference | 0 bytes +(469 rows) + diff --git a/src/test/regress/expected/upgrade_list_citus_objects.out b/src/test/regress/expected/upgrade_list_citus_objects.out index bc8a60bc2..83a644aef 100644 --- a/src/test/regress/expected/upgrade_list_citus_objects.out +++ b/src/test/regress/expected/upgrade_list_citus_objects.out @@ -35,9 +35,9 @@ ORDER BY 1; function citus_add_secondary_node(text,integer,text,integer,name) function citus_blocking_pids(integer) function citus_conninfo_cache_invalidate() - function citus_copy_shard_placement(bigint, text, integer, text, integer, boolean, citus.shard_transfer_mode) + function citus_copy_shard_placement(bigint,text,integer,text,integer,boolean,citus.shard_transfer_mode) function citus_create_restore_point(text) - function citus_disable_node(text, integer) + function citus_disable_node(text,integer) function citus_dist_local_group_cache_invalidate() function citus_dist_node_cache_invalidate() function citus_dist_object_cache_invalidate() @@ -45,7 +45,7 @@ ORDER BY 1; function citus_dist_placement_cache_invalidate() function citus_dist_shard_cache_invalidate() function citus_dist_stat_activity() - function citus_drain_node(text, integer, citus.shard_transfer_mode, name) + function citus_drain_node(text,integer,citus.shard_transfer_mode,name) function citus_drop_all_shards(regclass,text,text) function citus_drop_trigger() function citus_executor_name(integer) @@ -71,14 +71,15 @@ ORDER BY 1; function citus_query_stats() function citus_relation_size(regclass) function citus_remote_connection_stats() - function citus_remove_node(text, integer) + function citus_remove_node(text,integer) function citus_server_id() function citus_set_coordinator_host(text,integer,noderole,name) function citus_set_default_rebalance_strategy(text) - function citus_set_node_property(text, integer, text, boolean) + function citus_set_node_property(text,integer,text,boolean) function citus_shard_allowed_on_node_true(bigint,integer) function citus_shard_cost_1(bigint) function citus_shard_cost_by_disk_size(bigint) + function citus_shard_sizes() function citus_stat_statements() function citus_stat_statements_reset() function citus_table_is_visible(oid) @@ -86,7 +87,7 @@ ORDER BY 1; function citus_text_send_as_jsonb(text) function citus_total_relation_size(regclass,boolean) function citus_truncate_trigger() - function citus_unmark_object_distributed(oid, oid, integer) + function citus_unmark_object_distributed(oid,oid,integer) function citus_update_node(integer,text,integer,boolean,integer) function citus_update_shard_statistics(bigint) function citus_update_table_statistics(regclass) @@ -225,11 +226,12 @@ ORDER BY 1; view citus_dist_stat_activity view citus_lock_waits view citus_shard_indexes_on_worker + view citus_shards view citus_shards_on_worker view citus_stat_statements view citus_tables view citus_worker_stat_activity view pg_dist_shard_placement view time_partitions -(215 rows) +(217 rows) diff --git a/src/test/regress/expected/upgrade_list_citus_objects_0.out b/src/test/regress/expected/upgrade_list_citus_objects_0.out index 177624603..8219ef2bf 100644 --- a/src/test/regress/expected/upgrade_list_citus_objects_0.out +++ b/src/test/regress/expected/upgrade_list_citus_objects_0.out @@ -32,9 +32,9 @@ ORDER BY 1; function citus_add_secondary_node(text,integer,text,integer,name) function citus_blocking_pids(integer) function citus_conninfo_cache_invalidate() - function citus_copy_shard_placement(bigint, text, integer, text, integer, boolean, citus.shard_transfer_mode) + function citus_copy_shard_placement(bigint,text,integer,text,integer,boolean,citus.shard_transfer_mode) function citus_create_restore_point(text) - function citus_disable_node(text, integer) + function citus_disable_node(text,integer) function citus_dist_local_group_cache_invalidate() function citus_dist_node_cache_invalidate() function citus_dist_object_cache_invalidate() @@ -42,7 +42,7 @@ ORDER BY 1; function citus_dist_placement_cache_invalidate() function citus_dist_shard_cache_invalidate() function citus_dist_stat_activity() - function citus_drain_node(text, integer, citus.shard_transfer_mode, name) + function citus_drain_node(text,integer,citus.shard_transfer_mode,name) function citus_drop_all_shards(regclass,text,text) function citus_drop_trigger() function citus_executor_name(integer) @@ -68,14 +68,15 @@ ORDER BY 1; function citus_query_stats() function citus_relation_size(regclass) function citus_remote_connection_stats() - function citus_remove_node(text, integer) + function citus_remove_node(text,integer) function citus_server_id() function citus_set_coordinator_host(text,integer,noderole,name) function citus_set_default_rebalance_strategy(text) - function citus_set_node_property(text, integer, text, boolean) + function citus_set_node_property(text,integer,text,boolean) function citus_shard_allowed_on_node_true(bigint,integer) function citus_shard_cost_1(bigint) function citus_shard_cost_by_disk_size(bigint) + function citus_shard_sizes() function citus_stat_statements() function citus_stat_statements_reset() function citus_table_is_visible(oid) @@ -83,7 +84,7 @@ ORDER BY 1; function citus_text_send_as_jsonb(text) function citus_total_relation_size(regclass,boolean) function citus_truncate_trigger() - function citus_unmark_object_distributed(oid, oid, integer) + function citus_unmark_object_distributed(oid,oid,integer) function citus_update_node(integer,text,integer,boolean,integer) function citus_update_shard_statistics(bigint) function citus_update_table_statistics(regclass) @@ -221,11 +222,12 @@ ORDER BY 1; view citus_dist_stat_activity view citus_lock_waits view citus_shard_indexes_on_worker + view citus_shards view citus_shards_on_worker view citus_stat_statements view citus_tables view citus_worker_stat_activity view pg_dist_shard_placement view time_partitions -(211 rows) +(213 rows) diff --git a/src/test/regress/sql/multi_mx_create_table.sql b/src/test/regress/sql/multi_mx_create_table.sql index 82fdb1d57..5e3ac3abf 100644 --- a/src/test/regress/sql/multi_mx_create_table.sql +++ b/src/test/regress/sql/multi_mx_create_table.sql @@ -440,3 +440,4 @@ FROM citus_tables ORDER BY "Name"::text; +SELECT shard_name, table_name, citus_table_type, shard_size FROM citus_shards ORDER BY shard_name::text;