我正在PostgreSQL中基于GiST作为扩展创建自己的索引方法。我希望我的运算符中的一个函数(查看示例部分)根据用户定义的值以不同的行为 - 我想避免用户必须再次删除并创建运算符。
因此,我正在考虑引入一个 GUC 变量。但是,我不太确定如何适当地实现这一点。现在在我的实现中,运算符是使用 GUC 的值创建的,一旦 GUC 值在运行时发生变化,它的行为就不会有所不同。
我不确定我是否必须以某种方式更改函数的签名以使用 GUC,或者我是否必须引入一些指向 GUC 的指针。我找不到任何有用的材料,也不完全了解实现这一目标的内部结构。
在引入在运行时更改行为的运算符时,必须使用哪些最佳实践?不幸的是,在这种情况下,我找不到太多关于编写内部函数/运算符/GUC 的信息,因此听到任何类型的反馈都会很棒。
"GUC"(大统一配置)只是程序代码中的全局 C 变量,因此更改其值将在代码读取变量后立即生效。
您的函数将位于加载到 PostgreSQL 中的共享对象中,您可以使用在加载时调用的_PG_init()
函数向DefineCustomXXXVariable()
函数注册新的 GUC。
然后,您的 GUC 可以像任何其他 GUC 一样设置。
我建议您查看像auto_explain
这样的 contrib 模块,看看它们是如何做到的。