6.1. Функции
-
shardman.broadcast_all_sql(statementtext) Выполняет
операторв каждой группе репликации.Предупреждение
Функция
shardman.broadcast_all_sqlне может выполняться рекурсивно. Попытка это сделать приводит к ошибке «Command execution must be initiated by coordinator» (Выполнение команды должно инициироваться координатором).-
shardman.broadcast_query(statementtext) Действует аналогично 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(statementtext) Выполняет
операторв каждой группе репликации, кроме текущей.Предупреждение
Функция
shardman.broadcast_sqlне может выполняться рекурсивно. Попытка это сделать приводит к ошибке «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) Выясняет, к какой секции сегментированной таблицы с oid
relidпринадлежитval. Возвращает NULL, если сегментированная таблица с oidrelidне существует. Возвращает имя локальной схемы и имена отношений. Если значение принадлежит секции, хранящейся в другой группе репликации, также возвращает удалённую схему и имя отношения. Возвращает только 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(relidregclass,snumint,partition_boundtext[]) Присоединяет ранее отсоединённую подсекцию с номером
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(relidregclass,snumint,partition_boundtext[]) Создаёт подсекцию с номером
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(relidregclass,snumint) Отсоединяет подсекцию с номером
snumот локально секционированной таблицыrelid. Номер секции можно определить из представленияshardman.subparts.Операция выполняется на уровне кластера.
Пример:
select shardman.detach_subpart('pgbench_history'::regclass, 1);-
shardman.drop_subpart(relidregclass,snumint) Удаляет подсекцию с номером
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.