6.1. Functions #

shardman.broadcast_all_sql(statement text ) #

Executes statement on every replication group.

Warning

The shardman.broadcast_all_sql function cannot be executed recursively. An attempt to do so results in an error Command execution must be initiated by coordinator.

shardman.broadcast_query(statement text) #

Functions as shardman.broadcast_all_sql and returns an executed SQL statement results.

You may optionally set include_rgid to true, then the resulting tuples will have a number of the node the tuple originated from.

Example with include_rgid set to false:

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_rgid set to true:

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(statement text) #

Executes statement on every replication group but the current one.

Warning

The shardman.broadcast_sql function 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(relid oid, val variadic "any") → shardman.get_partition_for_value_type ( rgid int, local_nspname text, local_relname text, remote_nspname text, remote_relname text) #

Finds out which partition of a sharded table with oid relid the val belongs to. Returns NULL if the sharded table with oid relid does 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 ANALYZE on 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 runs ANALYZE of 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(relid regclass, snum int, partition_bound text[]) #

Attaches a previously detached subpartition number snum to a locally-partitioned table relid as a partition for the values within partition_bound. All subpartition tables and foreign tables should already exist. The partition_bound parameter 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(relid regclass, snum int, partition_bound text[]) #

Creates a subpartition number snum for a locally-partitioned table relid as a partition for the values within partition_bound. The partition_bound parameter 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(relid regclass, snum int) #

Detaches a subpartition number snum from a locally-partitioned table relid. The partition number can be determined from the shardman.subparts view.

The operation is performed cluster-wide.

Example:

select shardman.detach_subpart('pgbench_history'::regclass, 1);

shardman.drop_subpart(relid regclass, snum int) #

Drops subpartition number snum from locally-partitioned table relid. Partition number can be determined from the shardman.subparts view.

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 prefixes read_efd_, write_efd_, and sort_time_) in the shardman.silk_statinfo view.

shardman.silk_routing #

Retrieves the results of the multiplexer silk_connects, silk_backends, and silk_routes functions.

shardman.silk_rbc_snap #

Retrieves a consistent snapshot of all the connects, backends and routes that can be used by silk_connects, silk_backends, and silk_routes functions.

pdf