c - 需要扩展库才能使用 PG_MODULE_MAGIC 宏

标签 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';

我收到了错误信息:

ERROR: incompatible library "/usr/lib/postgresql/8.4/lib/pg_myextlib.so": missing magic block HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.

我快速搜索了一下,发现了一些关于此的旧话题。他们似乎都提供了类似于 here 的解决方案。 .

但是,由于这些线程很旧(+ 没有对答案进行投票),我认为最好在这里提问,看看解决这个问题的正确方法是什么。

旁白:因为底层库是用C写的,所以我在标签中包含了C。如果您认为“C”不是该问题的相关标签,请随时将其删除。

最佳答案

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

关于c - 需要扩展库才能使用 PG_MODULE_MAGIC 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678645/

相关文章:

c - Ascii 转换错误

c - 函数返回值困惑,显式的 true 和 false 是什么?

sql - 使用连接选择时的多行结果

java - 错误 : relation does not exist

c++ - 使用 libpqxx 库插入 NULL/空字符串

c 双字段访问,为什么会有 struct->field_1->field_2

c - 在 visual studio 的命令行中以 C 的形式作为标准输入文件

c - 求解n个线性方程

sql - 如何按另一列中的值对查询结果进行分组?

sql - 如何选择多列,但只显示唯一/非重复的结果(基于一个特定列)?