6.1. Функции
-
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, если сегментированная таблица с 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(
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
.