Параллельный агрегат расширения Postgres C, как получить идентификатор работника и номер строки?

#c #postgresql #postgresql-12 #postgresql-extensions

#c #postgresql #postgresql-12 #postgresql-расширения

Вопрос:

Я пишу расширение Postgres C для параллельной агрегатной функции. Обычно в C или C я получаю свой идентификатор потока и индексирование выполняемой работы, а затем я могу убедиться, что работа может быть выполнена без зависимости и что конечный результат всегда правильный.

При отсутствии индекса (номера строки в таблице, а не индекса postgres) в строке, с которой я работаю, вместе с идентификатором рабочего, я не могу ничего обработать с помощью своей агрегатной функции и гарантировать правильность.

  1. Есть ли способ получить worker_id в postgres для параллельных расширений C aggregate?
  2. Есть ли способ получить индекс / идентификатор / номер строки из агрегатной функции C без необходимости вычислять его в SQL и передавать его в виде столбца в мою функцию?

По крайней мере, я знаю, что идентификатор работника существует, просто не знаю, как его получить.

Комментарии:

1. Можете ли вы показать CREATE AGGREGATE инструкцию и как именно вы собираетесь выполнять распараллеливание?

2. Как я намереваюсь выполнить распараллеливание? хм, это определяется postgres. Отсюда и весь смысл получения индексов, чтобы независимо от того, как postgres это делает, ответ в любом случае был правильным.