0

我正在基于GiST作为扩展在 PostgreSQL 中创建自己的索引方法。我希望我的运算符中的一个函数(查看示例部分)根据用户定义的值表现不同 - 我希望避免用户不得不删除并再次创建运算符。

所以,我正在考虑引入一个GUC变量。但是,我不太确定如何适当地实现这一点。现在在我的实现中,操作符是使用 GUC 的值创建的,并且一旦 GUC 值在运行时发生变化,它的行为就不会有所不同。

我不确定是否必须以某种方式更改函数的签名以使用 GUC,或者是否必须引入一些指向 GUC 的指针。我找不到任何有用的材料,也没有完全理解实现这一目标的内部机制。

我必须使用哪些最佳实践来引入在运行时改变行为的运算符?不幸的是,我找不到太多关于在这种情况下编写内部函数/操作符/GUC 的信息,所以很高兴听到任何形式的反馈。

4

1 回答 1

1

“GUC”(大统一配置)只是程序代码中的一个全局 C 变量,因此一旦您的代码读取该变量,更改它的值就会生效。

您的函数将位于加载到 PostgreSQL 中的共享对象中,您可以使用_PG_init()在加载时调用的函数向函数注册新的 GUC DefineCustomXXXVariable()

然后您的 GUC 可以像任何其他 GUC 一样设置。

我建议您查看 contrib 模块auto_explain,看看它们是如何做到的。

于 2017-04-01T15:48:56.390 回答