shardman.broadcast_all_sql(statement text )
Выполняет оператор в каждой группе репликации.
Функция shardman.broadcast_all_sql не может выполняться рекурсивно. Попытка это сделать приводит к ошибке «Command execution must be initiated by coordinator» (Выполнение команды должно инициироваться координатором).
shardman.broadcast_query(statement text)
Действует аналогично shardman.broadcast_all_sql, а также возвращает результаты исполняемого выражения SQL.
Можно задать необязательный параметр include_rgid, тогда в результирующих кортежах будет номер узла, из которого получен кортеж.
Пример с отключённым параметром include_rgid:
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) Пример с включённым параметром include_rgid:
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)
Выполняет оператор в каждой группе репликации, кроме текущей.
Функция shardman.broadcast_sql не может выполняться рекурсивно. Попытка это сделать приводит к ошибке «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)
Выясняет, к какой секции сегментированной таблицы с oid relid принадлежит val. Возвращает NULL, если сегментированная таблица с oid relid не существует. Возвращает имя локальной схемы и имена отношений. Если значение принадлежит секции, хранящейся в другой группе репликации, также возвращает удалённую схему и имя отношения. Возвращает только rgid, если используется секционирование второго уровня.
Пример:
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()
Выполняет кластерный анализ сегментированных и глобальных таблиц. Сначала эта функция выполняет ANALYZE для всех локальных секций сегментированных таблиц на каждом узле, а затем отправляет эту статистику на другие узлы. Затем она выбирает один узел для каждой глобальной таблицы и запускает ANALYZE этой таблицы на выбранном узле. Собранная статистика транслируется на все остальные узлы кластера.
Пример:
select shardman.global_analyze();
shardman.attach_subpart(relid regclass, snum int, partition_bound text[])
Присоединяет ранее отсоединённую подсекцию с номером snum к локально секционированной таблице relid в качестве секции для указанных значений в диапазоне partition_bound. Все таблицы подсекции и сторонние таблицы уже должны существовать. Параметр partition_bound — это пара нижней и верхней границ секции. Если и нижняя, и верхняя границы равны NULL, подсекция присоединятся как стандартная.
Операция выполняется на уровне кластера.
Пример:
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[])
Создаёт подсекцию с номером snum для локально секционированной таблицы relid в качестве секции для значений в диапазоне partition_bound. Параметр partition_bound — это пара нижней и верхней границ секции. Если и нижняя, и верхняя границы равны NULL, подсекция создаётся как стандартная. Если номер подсекции не указан, он будет выбран в качестве следующего доступного номера секции.
Операция выполняется на уровне кластера.
Примеры:
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)
Отсоединяет подсекцию с номером snum от локально секционированной таблицы relid. Номер секции можно определить из представления shardman.subparts.
Операция выполняется на уровне кластера.
Пример:
select shardman.detach_subpart('pgbench_history'::regclass, 1);shardman.drop_subpart(relid regclass, snum int)
Удаляет подсекцию с номером snum из локально секционированной таблицы relid. Номер секции можно определить из представления shardman.subparts.
Операция выполняется на уровне кластера.
Пример:
select shardman.drop_subpart('pgbench_history'::regclass, 1);shardman.am_coordinator()
Проверяет, является ли текущий сеанс координатором запроса. Данная проверка позволят избежать случаев повторного срабатывание триггеров глобальных и сегментированных таблиц, когда триггер срабатывает сначала в координаторе запроса, а потом на удалённых узлах при изменении данных.
SELECT shardman.am_coordinator(); am_coordinator ---------------- t (1 row)
Пример проверки триггерной функцией координатора запросов:
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()
Сбрасывает значение метрик с префиксом transferred_ и временных метрик (с префиксами read_efd_, write_efd_ и sort_time_) в представлении shardman.silk_statinfo.
shardman.silk_routing
Выводит результаты функций мультиплексора silk_connects, silk_backends и silk_routes.
shardman.silk_rbc_snap
Выводит согласованный снимок всех соединений, процессов и маршрутов, которые могут использоваться функциями silk_connects, silk_backends и silk_routes.