PostgreSQL - использование GUC в операторе?

Я создаю свой собственный метод индексации в PostgreSQL на основе GiST в качестве расширения. Я хочу, чтобы одна из моих функций (см. Раздел "Примеры") в моем операторе работала по-разному в зависимости от значения, определенного пользователем. Я хочу избежать того, чтобы пользователю приходилось отбрасывать и снова создавать операторы.

Итак, я смотрел на введение переменной GUC. Однако я не совсем уверен, как правильно реализовать это. Прямо сейчас в моей реализации оператор создается со значением GUC и не ведет себя иначе, как только значение GUC изменяется во время выполнения.

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

Какие передовые практики я должен использовать для введения оператора, который меняет поведение во время выполнения? К сожалению, я не могу найти много информации о написании внутренних функций / операторов /GUC в этом контексте, и поэтому было бы здорово услышать любые отзывы.

1 ответ

Решение

"GUC" (Grand Unified Configuration) - это просто глобальная переменная C в программном коде, поэтому изменение ее значения вступит в силу, как только ваш код прочитает переменную.

Ваша функция будет в общем объекте, который загружен в PostgreSQL, и вы можете использовать _PG_init() функция, которая вызывается во время загрузки, чтобы зарегистрировать новый GUC с DefineCustomXXXVariable() функции.

Ваш GUC может быть установлен как любой другой GUC.

Я рекомендую вам взглянуть на такие модули как auto_explain чтобы увидеть, как они это делают.

Другие вопросы по тегам