扩展库需要使用PG_MODULE_MAGIC宏

时间:2011-12-30 10:49:01

标签: c postgresql

几年前我为我的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”不是此问题的相关标签,请随意将其删除。

1 个答案:

答案 0 :(得分:4)

二进制模块在市长版本之间不兼容。 PG_MODULE_MAGIC宏可以确保它。您必须将此宏添加到您的代码并重新编译它。也许还有一点点。只有SPI API是稳定的 - 其他内部功能不是 - 并且可能会有一些小的变化。