几年前我为我的postgreSQL数据库编写了一个C扩展(我认为它当时是8.0版 - 我正在使用 Version1调用约定)。
我尝试使用以下方法在PG 8.4数据库中加载扩展程序:
CREATE FUNCTION foobar(float8[],float8[],float8[],float8[],int4) RETURNS int4
AS '$libdir/pg_myextlib.so' LANGUAGE 'c';
我收到了错误消息:
错误:不兼容的库 “/usr/lib/postgresql/8.4/lib/pg_myextlib.so”:缺少魔法块 提示:扩展库需要使用PG_MODULE_MAGIC 宏。
我快速搜索了这个,并找到了一些关于此问题的老问题。他们似乎都提供了类似于here的解决方案。
然而,由于这些线程已经老了(+答案没有投票),我认为最好在这里询问看看解决这个问题的正确方法是什么。
除此之外:因为底层库是用C语言编写的,所以我在标签中包含了C.如果您的“C”不是此问题的相关标签,请随意将其删除。
答案 0 :(得分:4)
二进制模块在市长版本之间不兼容。 PG_MODULE_MAGIC宏可以确保它。您必须将此宏添加到您的代码并重新编译它。也许还有一点点。只有SPI API是稳定的 - 其他内部功能不是 - 并且可能会有一些小的变化。