6.1. Functions #
-
shardman.broadcast_all_sql(#statementtext) Executes
statementon every replication group.Warning
The
shardman.broadcast_all_sqlfunction cannot be executed recursively. An attempt to do so results in an error “Command execution must be initiated by coordinator”.-
shardman.broadcast_query(#statementtext) Functions as shardman.broadcast_all_sql and returns an executed SQL
statementresults.You may optionally set
include_rgidtotrue, then the resulting tuples will have a number of the node the tuple originated from.Example with
include_rgidset tofalse:select shardman.broadcast_query('SELECT relname from pg_class where relkind=''f'''); broadcast_query ----------------- (t_1_fdw) (t_2_fdw) (t_0_fdw) (t_2_fdw) (t_0_fdw) (t_1_fdw) (6 rows)Example with
include_rgidset totrue:select shardman.broadcast_query('SELECT relname from pg_class where relkind=''f''', include_rgid => true); broadcast_query ----------------- (1,t_1_fdw) (1,t_2_fdw) (2,t_0_fdw) (2,t_2_fdw) (3,t_0_fdw) (3,t_1_fdw) (6 rows)-
shardman.broadcast_sql(#statementtext) Executes
statementon every replication group but the current one.Warning
The
shardman.broadcast_sqlfunction cannot be executed recursively. An attempt to do so results in an error “Command execution must be initiated by coordinator”.-
shardman.get_partition_for_value(#relidoid,valvariadic "any") →shardman.get_partition_for_value_type(rgidint,local_nspnametext,local_relnametext,remote_nspnametext,remote_relnametext) Finds out which partition of a sharded table with oid
relidthevalbelongs to. Returns NULL if the sharded table with oidreliddoes not exist. Returns the local schema name and relation names. If the value belongs to a partition stored in another replication group, also returns the remote schema and relation name. Returns only rgid if second-level partitioning is used.Example:
select * from shardman.get_partition_for_value('pgbench_branches'::regclass, 20); rgid | local_nspname | local_relname | remote_nspname | remote_relname ------+---------------+-------------------------+----------------+--------------------- 3 | public | pgbench_branches_17_fdw | public | pgbench_branches_17-
shardman.global_analyze()# Performs cluster-wide analysis of sharded and global tables. First, this function executes
ANALYZEon all local partitions of sharded tables on each node, then sends this statistics to other nodes. Next, it selects one node per global table and runsANALYZEof this table on the selected node. Gathered statistics is broadcast to all other nodes in the cluster.Example:
select shardman.global_analyze();
-
shardman.attach_subpart(#relidregclass,snumint,partition_boundtext[]) Attaches a previously detached subpartition number
snumto a locally-partitioned tablerelidas a partition for the values withinpartition_bound. All subpartition tables and foreign tables should already exist. Thepartition_boundparameter is a pair of lower and upper bounds for the partition. If lower and upper bounds are both NULL, the subpartition is attached as the default one.The operation is performed cluster-wide.
Example:
select shardman.attach_subpart('pgbench_history'::regclass, 1,$${'2021-01-01 00:00', '2022-01-01 00:00'}$$);-
shardman.create_subpart(#relidregclass,snumint,partition_boundtext[]) Creates a subpartition number
snumfor a locally-partitioned tablerelidas a partition for the values withinpartition_bound. Thepartition_boundparameter is a pair of lower and upper bounds for the partition. If lower and upper bounds are both NULL, the subpartition is created as the default one. If the subpartition number is not specified, it will be selected as the next available partition number.The operation is performed cluster-wide.
Examples:
select shardman.create_subpart('pgbench_history'::regclass, 1, $${'2021-01-01 00:00', '2022-01-01 00:00'}$$); select shardman.create_subpart('pgbench_history'::regclass, partition_bound:=$${'2022-01-01 00:00', '2023-01-01 00:00'}$$);-
shardman.detach_subpart(#relidregclass,snumint) Detaches a subpartition number
snumfrom a locally-partitioned tablerelid. The partition number can be determined from theshardman.subpartsview.The operation is performed cluster-wide.
Example:
select shardman.detach_subpart('pgbench_history'::regclass, 1);-
shardman.drop_subpart(#relidregclass,snumint) Drops subpartition number
snumfrom locally-partitioned tablerelid. Partition number can be determined from theshardman.subpartsview.The operation is performed cluster-wide.
Example:
select shardman.drop_subpart('pgbench_history'::regclass, 1);-
shardman.am_coordinator()# Returns whether the current session is the query coordinator. This check allows avoiding cases where global and sharded table triggers fire twice, first on the query coordinator, then on the remote nodes when data is modified.
SELECT shardman.am_coordinator(); am_coordinator ---------------- t (1 row)
Example of the trigger function checking the query coordinator:
CREATE OR REPLACE FUNCTION trg_func() RETURNS TRIGGER AS $$ BEGIN IF NOT shardman.am_coordinator() THEN -- exit on non coordinator RETURN NEW; END IF; -- execute only by coordinator RAISE WARNING 'Trigger fired!'; END $$ LANGUAGE plpgsql;-
shardman.silk_statinfo_reset()# Resets the values of the metrics with prefix
transferred_and time-based metrics (with prefixesread_efd_,write_efd_, andsort_time_) in the shardman.silk_statinfo view.-
shardman.silk_routing# Retrieves the results of the multiplexer
silk_connects,silk_backends, andsilk_routesfunctions.-
shardman.silk_rbc_snap# Retrieves a consistent snapshot of all the connects, backends and routes that can be used by
silk_connects,silk_backends, andsilk_routesfunctions.