postgresql - 如何使扩展不可重定位?
问题描述
我有一个扩展:https ://github.com/CraigTyle/Mathexp
我的任务是使扩展不可重定位:应该可以在任何模式中安装扩展,但应该不可能更改该模式。
有人告诉我这是怎么做的:不要使用运算符,而是@extschema@
为本地定义的类型和对象使用前缀。好吧,不要声明可重定位扩展。
我到底该怎么做?
解决方案
首先,您必须在扩展的控制文件中更改relocatable
为。false
除此之外,您得到的建议部分合理,部分无稽之谈。
你应该像这样定义你的函数:
CREATE FUNCTION .... AS
$$ /* function body */ $$
SET search_path = @extschema@;
然后将search_path
固定为pg_catalog
,pg_temp
并且在函数调用期间您的扩展模式。这意味着对没有显式模式的对象的所有访问都只会在这些模式中搜索。
然后您不必担心用 明确限定函数中的所有内容@extschema@
,并且您可以使用运算符而不必担心,因为search_path
也适用于运算符。(您也可以对运算符进行模式限定:OPERATOR(schema.+)
,但这显然很痛苦并且会损害可读性。)
推荐阅读
- java - 媒体播放器第二次无法播放
- java - Java绘图抖动
- r - 从一台 linux 服务器复制旧的 R 包并将它们安装在新服务器上
- r - 索引内部具有特定长度的字符串
- zxing - ZXing.net:如何访问原始字节(并克服嵌入空值的问题)?
- android - 如何在 Kotlin 的 Singleton 对象中按元素保存列表
- vba - MS-Access 列表框中显示货币的问题
- android - 仍然可以在 App Store / Google Play 发布 Phonegap Build 应用程序
- python - 在无服务器 Lambda 函数中访问 /tmp 或其他临时文件结构
- wso2 - WSO2APIM:API 失败,错误消息为 - 状态 = 消息已分派到主序列。无效的 URL。,RESOURCE =