From 724d56f949478019f2143cf784d3be916981c3c1 Mon Sep 17 00:00:00 2001 From: SaitTalhaNisanci Date: Wed, 13 Jan 2021 13:58:47 +0300 Subject: [PATCH] Add citus shard helper view (#4361) With citus shard helper view, we can easily see: - where each shard is, which node, which port - what kind of table it belongs to - its size With such a view, we can see shards that have a size bigger than some value, which could be useful. Also debugging can be easier in production as well with this view. Fetch shards in one go per node The previous implementation was slow because it would do a lot of round trips, one per shard to be exact. Hence it is improved so that we fetch all the shard_name, shard-size pairs per node in one go. Construct shards_names, sizes query on coordinator --- .../distributed/metadata/metadata_cache.c | 10 + .../distributed/metadata/metadata_utility.c | 207 +++++++- .../distributed/sql/citus--9.5-1--10.0-1.sql | 3 + .../sql/downgrades/citus--10.0-1--9.5-1.sql | 2 + .../sql/udfs/citus_shard_sizes/10.0-1.sql | 6 + .../sql/udfs/citus_shard_sizes/latest.sql | 6 + .../sql/udfs/citus_shards/10.0-1.sql | 33 ++ .../sql/udfs/citus_shards/latest.sql | 33 ++ src/include/distributed/metadata_cache.h | 2 +- src/include/distributed/metadata_utility.h | 2 + src/test/regress/expected/multi_extension.out | 4 +- .../regress/expected/multi_extension_0.out | 6 +- .../expected/multi_mx_create_table.out | 474 ++++++++++++++++++ .../expected/upgrade_list_citus_objects.out | 16 +- .../expected/upgrade_list_citus_objects_0.out | 16 +- .../regress/sql/multi_mx_create_table.sql | 1 + 16 files changed, 802 insertions(+), 19 deletions(-) create mode 100644 src/backend/distributed/sql/udfs/citus_shard_sizes/10.0-1.sql create mode 100644 src/backend/distributed/sql/udfs/citus_shard_sizes/latest.sql create mode 100644 src/backend/distributed/sql/udfs/citus_shards/10.0-1.sql create mode 100644 src/backend/distributed/sql/udfs/citus_shards/latest.sql 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;