如何使扩展不可重定位?



我有一个扩展名:https://github.com/CraigTyle/Mathexp

我的任务是使扩展不可重定位:应该可以在任何架构中安装扩展,但应该不可能更改该架构。

有人告诉我,这是如何做到的: 不要使用运算符,并对本地定义的类型和对象使用@extschema@前缀。 好吧,不要声明可重定位的扩展。

我到底要做什么?

首先,您必须在扩展的控制文件中将relocatable更改为false

除此之外,你得到的建议部分是合理的,部分是无稽之谈。

你应该像这样定义你的函数:

CREATE FUNCTION .... AS
$$ /* function body */ $$
SET search_path = @extschema@;

然后,在函数调用期间,search_path固定为pg_catalogpg_temp和扩展架构。 这意味着对没有显式架构的对象的所有访问将仅在这些架构中进行搜索。

然后,您不必担心用@extschema@显式限定函数中的所有内容,并且您不必担心使用运算符,因为search_path也适用于运算符。(您也可以对运算符进行架构限定:OPERATOR(schema.+),但这显然很痛苦,并且会损害可读性。

最新更新