PostgreSQL 内部 - 在 Operator 中使用 GUC?
PostgreSQL internals- using GUC in an Operator?
我在我的操作员中基于 GiST as extension. I want one of my functions(查看示例部分)在 PostgreSQL 中创建自己的索引方法,以根据用户定义的值进行不同的行为 - 我想避免用户不得不再次删除并创建操作员。
所以,我正在考虑引入一个 GUC 变量。但是,我不太确定如何适当地实施它。现在在我的实现中,运算符是用 GUC 的值创建的,并且一旦 GUC 值在运行时发生变化,它的行为就不会有所不同。
我不确定是否必须以某种方式更改函数的签名才能使用 GUC,或者我是否必须引入一些指向 GUC 的指针。我找不到任何有用的 material 并且我不完全了解实现此目标的内部机制。
我必须使用哪些最佳实践来引入在运行时更改行为的运算符?不幸的是,我找不到太多关于在这种情况下编写内部函数/ operators/GUC 的信息,因此很高兴听到任何类型的反馈。
“GUC”(Grand Unified Configuration)只是您程序代码中的一个全局 C 变量,因此更改其值将在您的代码读取该变量后立即生效。
您的函数将位于加载到 PostgreSQL 中的共享对象中,您可以使用在加载时调用的 _PG_init()
函数向 DefineCustomXXXVariable()
函数注册一个新的 GUC。
然后您的 GUC 可以像任何其他 GUC 一样设置。
我建议您查看像 auto_explain
这样的 contrib 模块,看看它们是如何做到的。
我在我的操作员中基于 GiST as extension. I want one of my functions(查看示例部分)在 PostgreSQL 中创建自己的索引方法,以根据用户定义的值进行不同的行为 - 我想避免用户不得不再次删除并创建操作员。
所以,我正在考虑引入一个 GUC 变量。但是,我不太确定如何适当地实施它。现在在我的实现中,运算符是用 GUC 的值创建的,并且一旦 GUC 值在运行时发生变化,它的行为就不会有所不同。
我不确定是否必须以某种方式更改函数的签名才能使用 GUC,或者我是否必须引入一些指向 GUC 的指针。我找不到任何有用的 material 并且我不完全了解实现此目标的内部机制。
我必须使用哪些最佳实践来引入在运行时更改行为的运算符?不幸的是,我找不到太多关于在这种情况下编写内部函数/ operators/GUC 的信息,因此很高兴听到任何类型的反馈。
“GUC”(Grand Unified Configuration)只是您程序代码中的一个全局 C 变量,因此更改其值将在您的代码读取该变量后立即生效。
您的函数将位于加载到 PostgreSQL 中的共享对象中,您可以使用在加载时调用的 _PG_init()
函数向 DefineCustomXXXVariable()
函数注册一个新的 GUC。
然后您的 GUC 可以像任何其他 GUC 一样设置。
我建议您查看像 auto_explain
这样的 contrib 模块,看看它们是如何做到的。