Для использования макроса PG_MODULE_MAGIC необходимы библиотеки расширений. - PullRequest
0 голосов
/ 30 декабря 2011

Я написал расширение C для своей базы данных postgreSQL несколько лет назад (я думаю, что тогда это была версия 8.0 - я использую Соглашения о вызовах версии1 ).

Я попытался загрузить расширение в базе данных 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 макросъемки.

Я сделал быстрый поиск этого и нашел несколько старых тем по этому поводу. Кажется, все они предлагают решение, подобное тому, которое здесь .

Однако, поскольку эти темы старые (+ нет ответов на вопросы), я подумал, что лучше спросить здесь, чтобы посмотреть, как это исправить.

В сторону: поскольку базовая библиотека написана на C, я включил C в теги. Не стесняйтесь удалить его, если вы отметили, что «С» не подходит для этого вопроса.

1 Ответ

4 голосов
/ 02 января 2012

Двоичные модули не совместимы между версиями мэра. Макрос PG_MODULE_MAGIC это обеспечивает. Вы должны добавить этот макрос в ваш код и перекомпилировать его. И, может быть, немного больше. Только SPI API стабилен - другие внутренние функции - нет, и возможны некоторые небольшие изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...