PostgreSQL创建addme扩展报错:无安装脚本及0.0.1版本更新路径
解决PostgreSQL扩展"addme"创建报错的方案
报错核心原因
PostgreSQL找不到版本为0.0.1的addme扩展对应的安装脚本,也没有定义到该版本的更新路径,本质是扩展的文件结构不符合PostgreSQL扩展规范,或者文件未放置到正确的系统目录中。
具体解决步骤
1. 构建符合规范的扩展文件
PostgreSQL扩展必须包含两个核心文件(针对0.0.1版本):
addme.control:扩展元数据配置文件,用于定义扩展的基础信息addme--0.0.1.sql:对应版本的安装脚本,包含扩展所有对象的创建逻辑
示例文件内容
addme.control示例:
comment = '自定义加法功能扩展' default_version = '0.0.1' relocatable = true # 如果扩展包含C语言编写的模块,需要添加module_pathname = '$libdir/addme',纯SQL扩展可省略
addme--0.0.1.sql示例(以创建加法函数为例):
CREATE OR REPLACE FUNCTION addme(a integer, b integer) RETURNS integer AS $$ BEGIN RETURN a + b; END; $$ LANGUAGE plpgsql; COMMENT ON FUNCTION addme(integer, integer) IS '计算两个整数的和';
2. 将扩展文件放置到正确目录
首先查询PostgreSQL的扩展目录路径:
SELECT setting FROM pg_settings WHERE name = 'sharedir';
返回的路径下的extension子目录(比如/usr/share/postgresql/16/extension/)就是目标位置,将addme.control和addme--0.0.1.sql复制到该目录,确保文件权限允许PostgreSQL进程读取(一般设置为644即可)。
3. 验证并创建扩展
重启PostgreSQL服务(确保新文件被加载),然后执行创建命令:
CREATE EXTENSION addme;
创建成功后即可使用扩展中的对象,比如调用示例函数:
SELECT addme(2, 3);
4. 版本更新路径配置(可选)
如果后续需要从旧版本升级到0.0.1,需要创建升级脚本(比如addme--0.0.0--0.0.1.sql),写入版本间的变更逻辑,同时在addme.control中添加update_path字段定义升级路径,示例:
update_path = '0.0.0--0.0.1'
内容的提问来源于stack exchange,提问作者Pawan Kukreja
相关产品推荐
相关产品推荐

